在 addBatch()
旁边PreparedStatement
的方法|还有一个 addBatch(String)
Statement
中的方法类(class)。
我想处理一系列不同的 sql 语句,并且正在寻找有关 addBatch(String) 在性能方面的含义的一些说明。使用此方法是否安全(且快速),还是在 Java 中将类似的 sql 语句分组并分组执行它们更好?
最佳答案
批处理允许您将相关的 SQL 语句分组到一批中,并通过一次调用数据库提交它们。
当您一次向数据库发送多条 SQL 语句时,可以减少通信开销,从而提高性能。
addBatch(String sql)
在接口(interface) java.sql.Statement
中定义,addBatch()
在 中定义java.sql.PreparedStatement
是 extends Statement
的子接口(interface)之一。 (其他是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() 实际上创建批量插入。
此外,您应该确保自动提交是错误的。维护一个计数器,并在该计数器上执行 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/