批处理允许您将相关的 SQL 语句分组到一个批处理中,并通过一次调用数据库来提交它们。
当您一次向数据库发送多个 SQL 语句时,可以减少通信开销,从而提高性能。
addBatch(String sql)定义在接口java.sql.Statement中,addBatch()定义在java.sql.PreparedStatement是extends Statement的子接口之一。 (其他是java.sql.CallableStatement)
根据JAVA Doc
addbatch(String sql) 方法不能在 PreparedStatement 或 CallableStatement 和 sql 上调用 - 通常这是 SQL INSERT 或 UPDATE 语句。
如果您想要批量插入或批量更新操作,首选addBatch()。
批处理执行的阻塞因素很少
DB make/version.
JDBC driver make/version.
例如:如果您使用的是 MySQL,请使用最新的驱动程序将 rewriteBatchedStatements=true 添加到您的连接字符串中,以使 statement.addBatch() 实际创建批量插入。
另外,您应该确保自动提交是错误的。维护一个计数器,当 Java 中的可用堆内存受到限制时,该计数器可以到达该计数器 executeBatch。
例子:
conn.setAutoCommit(false);
PreparedStatement pStmt = conn.prepareStatement("INSERT INTO mytable (field1,field2) VALUES (?,?)");
for all values:
pStmt.setString(1,val1);
pStmt.setString(2,val2);
pStmt.addBatch();
if ( i % 1000 == 0) {
pstmt.executeBatch();// Execute every 1000 items
}
pstmt.executeBatch();
conn.commit();