关于addBatch注意事项(字符串)(Considerations regarding addBa

2019-09-19 00:41发布

addBatch()的方法PreparedStatement还有一个addBatch(String)在该方法中Statement的类。

我要处理一系列不同的SQL语句,并正在寻找一些澄清什么addBatch(字符串)指的性能代价。 它是安全的(和快速)使用此方法还是更将类似的SQL语句中使用Java和集团执行呢?

Answer 1:

批处理,您可以将相关的SQL语句组合成一个批次,并与一个调用数据库提交。

当您发送几个SQL语句到数据库一次,可以减少通信开销的量,导致提高性能。

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

据JAVA文件

addbatch(String sql)方法不能叫上PreparedStatementCallableStatement和sql -通常这是一个SQL INSERTUPDATE语句。

addBatch()是首选。如果你想批量插入或批量更新操作。

有批次exections几阻塞因素是

DB make/version.
JDBC driver make/version.

例如:如果你使用MySQL,使用最新的驱动程序rewriteBatchedStatements = TRUE添加到您的连接字符串,使statement.addBatch()实际上创建批量插入。

此外,你应该确保自动提交是假的。 维护一个计数器,并达到对计数器则ExecuteBatch有助于当可用的Java堆内存的限制。

例:

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(); 


文章来源: Considerations regarding addBatch(String)