java中preparedstatement批量更新的核心是addbatch()累积sql并executebatch()一次性提交,既提升性能又防sql注入;须用?占位符预编译,循环setxxx()设参后addbatch(),executebatch()返回int[]结果数组,需手动事务控制与资源关闭。

Java 中 PreparedStatement 执行批量更新,核心是调用 addBatch() 累积多条 SQL,再用 executeBatch() 一次性提交。它比逐条执行快得多,也避免了 SQL 注入风险。
准备带参数的 PreparedStatement
必须使用占位符(?)预编译 SQL,不能拼接字符串。例如更新用户年龄:
String sql = "UPDATE users SET age = ? WHERE id = ?"; PreparedStatement ps = connection.prepareStatement(sql);
循环设置参数并添加到批处理
每次循环中调用 setXxx() 设置当前语句的参数,再调用 addBatch() 入队:
for (User user : userList) {
ps.setInt(1, user.getAge());
ps.setInt(2, user.getId());
ps.addBatch(); // 不执行,只缓存
}
执行批处理并处理结果
调用 executeBatch() 触发实际执行,返回 int[] 数组,每个元素表示对应语句影响的行数:
- 数组长度 = 调用 addBatch() 的次数
- 值为 -2 表示该语句未报告影响行数(如某些数据库的 DDL)
- 值为 -3 表示执行出错(此时会抛 BatchUpdateException)
- 建议在 try-catch 中捕获 BatchUpdateException,检查 getUpdateCounts() 获取已成功执行的部分结果
注意事务与资源管理
批量更新默认不自动提交,需手动控制事务:
- 执行前调用 connection.setAutoCommit(false)
- executeBatch() 成功后调用 connection.commit()
- 失败时调用 connection.rollback()
- 最后务必关闭 PreparedStatement 和 Connection(推荐用 try-with-resources)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











