编程语言
首页 > 编程语言> > java-关于addBatch(String)的注意事项

java-关于addBatch(String)的注意事项

作者:互联网

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

我想处理一系列不同的sql语句,并且正在寻找关于addBatch(String)意味着性能方面的一些澄清.使用此方法安全(快速)还是在Java中对相似的sql语句进行分组并按组执行更好?

解决方法:

批处理允许您将相关的SQL语句分组为一个批处理,并通过一次调用将其提交给数据库.

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

addBatch(String sql)在接口java.sql.Statement中定义,而addBatch()在java.sql.Statement接口中定义.PreparedStatement是扩展Statement的子接口之一. (其他是java.sql.CallableStatement)

根据JAVA Doc

无法在PreparedStatement或CallableStatement和sql上调用addbatch(String sql)方法-通常这是一个SQL INSERT或UPDATE语句.

如果要批量插入或批量更新操作,则首选addBatch().

批量执行的阻塞因素很少

DB make/version.
JDBC driver make/version.

例如:如果您使用的是MySQL,请使用最新的驱动程序将rewriteBatchedStatements = true添加到您的连接字符串中以使statement.addBatch()实际上创建批处理插入.

另外,您应确保自动提交为false.维护一个计数器,该计数器到达该计数器的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(); 

标签:jdbc,prepared-statement,java
来源: https://codeday.me/bug/20191101/1981352.html