Java中PreparedStatement批量执行SQL需先addBatch()添加参数化语句,再executeBatch()提交;须控制批量大小、捕获BatchUpdateException并处理部分失败,且同一PreparedStatement仅支持同构SQL。

Java 中用 PreparedStatement 批量执行多条 SQL,核心是调用 addBatch() 收集语句,再用 executeBatch() 一次性提交。关键在于参数绑定、批量大小控制和异常处理。
正确使用 addBatch() 和 executeBatch()
每次设置完一组参数后,必须调用 addBatch() 将当前参数组合加入批处理队列;不能只调用 setXxx() 就直接 executeBatch()。所有参数设置完再统一执行。
- 每轮循环中:设置参数 → 调用
addBatch() - 循环结束后:调用
executeBatch()提交全部 -
executeBatch()返回int[],每个元素对应一条语句的更新行数(Statement.SUCCESS_NO_INFO表示未知)
注意参数重用与变量作用域
PreparedStatement 是单条 SQL 模板,所有 addBatch() 添加的都是同一语句的不同参数值。不能在一个 PreparedStatement 中混用 INSERT、UPDATE 或不同表的语句。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 错误示例:用同一个 pstmt 先 set name 再 set email 然后 addBatch —— 实际上只是覆盖参数,不是“多条不同 SQL”
- 正确做法:INSERT 多条记录?用一个 INSERT 模板 + 多组参数;要执行不同 SQL,需多个 PreparedStatement 实例
控制批量大小,避免内存溢出或超时
一次 addBatch 太多条(如几万),可能触发数据库连接超时或 JVM 内存压力。建议分批次提交,例如每 1000 条执行一次。
立即学习“Java免费学习笔记(深入)”;
- 循环中计数,达到阈值就
executeBatch()并clearBatch() -
clearBatch()清空已添加但未执行的语句,防止重复执行 - 最后别忘了处理剩余未提交的语句
捕获 BatchUpdateException 处理部分失败
executeBatch() 抛出 BatchUpdateException 时,可能部分语句成功、部分失败。可通过 getUpdateCounts() 获取每条语句结果,定位失败位置。
- 检查返回的
int[]:-3 表示跳过,-2 表示执行异常,其他为影响行数 - 日志中打印失败索引和对应参数,便于排查
- 根据业务需要决定是否回滚整个事务(需开启事务管理)

















