Skip to content

通过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();//关闭操作对象
	}
}