3

addBatch()类中的方法旁边PreparedStatement还有一个addBatch(String)方法Statement

我想处理一系列不同的 sql 语句,并正在寻找一些关于 addBatch(String) 意味着性能方面的说明。使用此方法是否安全(且快速),或者将类似的 sql 语句在 Java 中分组并分组执行是否更好?

4

1 回答 1

4

批处理允许您将相关的 SQL 语句分组到一个批处理中,并通过一次调用数据库来提交它们。

一次向数据库发送多个 SQL 语句时,可以减少通信开销,从而提高性能。

addBatch(String sql)被定义在接口中java.sql.Statement并且addBatch()被定义在java.sql.PreparedStatement是子接口之一extends Statement。(其他是java.sql.CallableStatement

根据JAVA 文档

addbatch(String sql)不能在PreparedStatementorCallableStatement和 sql 上调用方法 - 通常这是 SQLINSERTUPDATE语句。

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(); 
于 2012-07-03T11:27:53.947 回答