JDBC批处理更新如何有用?

时间:2013-01-10 18:38:48

标签: java jdbc

每个人都说批量更新会减少JDBC调用的次数。有人可以解释“JDBC调用”的含义,以及与在一次JDBC调用中携带整个负载相比,此类调用的数量增加的成本是多少。

3 个答案:

答案 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应用程序和数据库服务器之间的往返。通常两者都在不同的服务器上,因此会减少大量的网络资源。因此,它实现了更好的性能。