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

标签 java jdbc prepared-statement

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

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

最佳答案

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

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

addBatch(String sql) 在接口(interface) java.sql.Statement 中定义,addBatch() 中定义java.sql.PreparedStatementextends Statement 的子接口(interface)之一。 (其他是java.sql.CallableStatement)

根据 JAVA Doc

addbatch(String sql) 方法不能在 PreparedStatementCallableStatement 和 sql 上调用 - 通常这是 SQL INSERT UPDATE 语句。

如果您想要批量插入或批量更新操作,则首选

addBatch()

批量执行的阻塞因素很少

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

关于java - 关于 addBatch(String) 的注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11309317/

相关文章:

java - 重构类以提高效率

java - 更改内部类中变量的值

java - 如何监控数据库中的新条目?

java - EmbeddedDatabaseBuilder & org.h2.jdbc.JdbcSQLException : Wrong user name or password

jdbc - 如何将 JDBC 驱动程序添加到 Flyway Gradle 插件

java - 捕获所有其他未预料到的异常

java - url-pattern/* 将 jsp 文件和静态资源作为单独的请求提供

c++ - 通过准备好的语句实现搜索功能的最佳实践

mysql - 如何在 MySQL 查询中为 NOT IN 子句指定命名参数值?

sql - Sql中的Callable statement和Prepared Statement有什么区别?