批量插入利器- PreparedStatement的addbatch

本文探讨了在使用Java进行数据库操作时,如何通过批量插入来提高效率。特别关注了避免在循环中频繁调用executeUpdate的问题,并介绍了使用addBatch方法进行优化的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    大家来找茬,看看我如下的代码有没有什么问题,可要睁大眼睛,好好找找哟。

    

try {
			Connection cnn= ConnectionManager.getConnection();
			pmst=cnn.prepareStatement(sbSql.toString());
			//使用循环批量插入
			for(Iterator<FlowCardDetail>iter=list.iterator();iter.hasNext();){
				FlowCardDetail flowCardDetail= iter.next();
				pmst.setString(1, flowCardNo);
				pmst.setInt(2, flowCardDetail.getAimClient().getId());
				pmst.setString(3,flowCardDetail.getItem().getItemNo());
				pmst.setBigDecimal(4,flowCardDetail.getOptQty());
				pmst.setString(5, flowCardDetail.getAdjustFlag());
				pmst.executeUpdate();
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
			throw new DaoException();
		}finally{
			ConnectionManager.close(pmst);
		}

    不知道大家有没有找到我的问题所在,在很早之前听说过在操作底层数据库的时候不能频繁的开合数据库,因为会导致效率低下。而我利用for循环实现批量插入的时候,pmst.executeUpdate()这个语句是在for循环里头的,因此多次的开合了数据库。那么该如何解决这个问题呢?首先是将pmst.executeUpdate()这个语句放到循环语句之外,那么如何将每次循环新增的sql语句放入到预编译的pmst中呢?于是,在这里就用到了pmst的addbatch语句。效果如下:

//使用循环批量插入
			for(Iterator<FlowCardDetail>iter=list.iterator();iter.hasNext();){
				FlowCardDetail flowCardDetail= iter.next();
				pmst.setString(1, flowCardNo);
				pmst.setInt(2, flowCardDetail.getAimClient().getId());
				pmst.setString(3,flowCardDetail.getItem().getItemNo());
				pmst.setBigDecimal(4,flowCardDetail.getOptQty());
				pmst.setString(5, flowCardDetail.getAdjustFlag());
				pmst.addBatch();
			}
			pmst.executeUpdate();

    小结:学习的事情都是一点点累计的,之前我很多的东西都是听了一个名词,至于为什么是那样,以及如何优化处理根本不知道。而近期,这些个模糊的理念好像逐渐的清楚起来了,开心。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值