每个人都说批量更新会减少JDBC调用的次数。有人可以解释“JDBC调用”的含义,以及与在一次JDBC调用中携带整个负载相比,此类调用的数量增加的成本是多少。
答案 0 :(得分:10)
通俗地说,当开发人员使用短语 JDBC call 时,他们谈论的是通过网络将信息发送到数据库。 JDBC API的批处理功能允许您在单个网络调用中提交多个离散操作,而不是调用每个SQL语句。来自JDBC spec:
批量更新工具允许Statement对象提交一组 异构SQL语句作为单个单元或批处理组合在一起 基础数据源。
对于PreparedStatement,只存在创建单个语句的附加好处。这允许您使用多组绑定参数执行相同的查询,而无需多次将语句本身添加到批处理中。最终结果是减少了网络流量及其相关的开销。
规范中的一个例子:
PreparedStatement stmt = con.prepareStatement(
"INSERT INTO employees VALUES (?, ?)");
stmt.setInt(1, 2000);
stmt.setString(2, "Kelly Kaufmann");
stmt.addBatch();
stmt.setInt(1, 3000);
stmt.setString(2, "Bill Barnes");
stmt.addBatch();
// submit the batch for execution
int[] updateCounts = stmt.executeBatch();
答案 1 :(得分:4)
如IBM's documentation中所述:
支持JDBC 2.0及更高版本的JDBC驱动程序支持批处理 更新。使用批量更新,而不是更新DB2(R)的行 一次一个表,可以直接JDBC执行一组更新 同时。可以包含在同一批次中的语句 更新称为可替换语句。
如果语句包含输入参数或主机表达式,则可以 仅在具有其他实例的批处理中包含该语句 同样的声明。这种类型的批次称为均质批次。如果 一个语句没有输入参数,你可以在其中包含该语句 仅当批处理中的其他语句没有输入时才批处理 参数或主机表达式。这种类型的批次称为a 异构批处理。可以包含在同一个语句中的两个语句 批次称为批次兼容。
答案 2 :(得分:1)
在调用JDBC更新时,java程序连接到数据库服务器并执行查询。这意味着每次更新时,java程序都会联系数据库服务器并执行查询。现在,如果我们使用JDBC批处理更新,则java应用程序只需要与数据库服务器联系一次,并在数据库服务器上执行所有查询并返回到java应用程序。
简而言之,它将减少java应用程序和数据库服务器之间的往返。通常两者都在不同的服务器上,因此会减少大量的网络资源。因此,它实现了更好的性能。