使用 addbatch() 和 executebatch() 方法可以显著提速。具体做法是:在循环中调用 addbatch() 将多条 sql 语句加入批次,循环结束后一次性调用 executebatch() 执行所有语句,最后通过 clearbatch() 清空缓存。

如何配置 JDBC URL 以启用批量处理
需要在 JDBC 连接字符串中添加 rewriteBatchedStatements=true 参数。该参数允许 MySQL 驱动将多个 INSERT 语句重写为一条包含多值的 INSERT 语句,从而减少网络往返次数。

如何处理批量执行中的异常与事务回滚
当批量操作中某条语句失败时,默认行为取决于驱动配置。若未设置 continueOnError,整个批次可能中断。建议结合 try-catch 捕获 BatchUpdateException,并根据需要手动回滚事务或记录失败条目。
立即学习“Java免费学习笔记(深入)”;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class BatchInsertExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/testdb?rewriteBatchedStatements=true";
String user = "root";
String password = "password";
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
try (Connection conn = DriverManager.getConnection(url, user, password);
PreparedStatement pstmt = conn.prepareStatement(sql)) {
conn.setAutoCommit(false);
for (int i = 0; i < 1000; i++) {
pstmt.setString(1, "User" + i);
pstmt.setString(2, "user" + i + "@example.com");
pstmt.addBatch();
}
int[] results = pstmt.executeBatch();
conn.commit();
System.out.println("Batch executed successfully. Rows affected: " + results.length);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
预期输出:
Batch executed successfully. Rows affected: 1000
数据库表 users 中将新增 1000 条记录,每条记录包含唯一的 name 和 email。


















