通过PreparedStatement进行批量数据操作
注意:
- 执行批处理操作前,自动提交模式设置为FALSE
- 执行批处理操作,并进行手动提交(commit),数据量大时,设置手动提交间隔
- 执行批处理操作后,自动提交模式恢复为 TRUE
- 执行批处理操作异常发生时,进行rollback(回滚)
- PreparedStatement执行语句不能为DDL语句
示例: 将 10000 条记录插入数据库中,每 100 条执行一次提交操作
try{
conn.setAutoCommit(false); //设置非自动提交
//创建PreparedStatement对象
ps = conn.prepareStatement("insert into testtab values (?, ?, ?)");
//循环添加批处理数据
for(int i = 0;i<list.size();i++){
HashMap map = list.get(i);//list为数据封装,此处略
ps.setString(1, map.get("id").toString());
ps.setString(2, map.get("name").toString());
ps.setString(3, map.get("age").toString());
ps.addBatch();
if(mod(i,100)==0){//每100条执行一次执行操作
ps.executeBatch();//执行批量插入
conn.commit();//执行事务提交
}
}
ps.executeBatch();//执行批量插入
conn.commit(); //提交事务
}catch(Exception e){
if (!conn.isClosed()) {
conn.rollback(); //出现异常,回滚事务
System.out.println("提交失败,回滚!");
conn.setAutoCommit(true); //关闭非自动提交
}
} finally {
if (ps!= null) {
ps.close();//关闭操作对象
}
}