JDBC批处理更新如何有用?

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

通俗地说,当开发人员使用JDBC调用时,他们谈论的是通过线路将信息发送到数据库。 JDBC API的批处理function允许您在单个网络调用中提交多个离散操作,而不是调用每个SQL语句。 来自JDBC规范 :

批处理更新工具允许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(); 

如IBM的文档中所述 :

支持JDBC 2.0及更高版本的JDBC驱动程序支持批量更新。 通过批量更新,您可以指示JDBC同时执行一组更新,而不是一次更新一个DB2(R)表的行。 可以包含在同一批更新中的语句称为batchable语句。

如果语句具有输入参数或主机表达式,则只能在具有同一语句的其他实例的批处理中包含该语句。 这种类型的批次称为均质批次。 如果语句没有输入参数,则只有当批处理中的其他语句没有输入参数或主机表达式时,才能在批处理中包含该语句。 这种类型的批次称为异构批次。 可以包含在同一批次中的两个语句称为批处理兼容。

在调用JDBC更新时,java程序连接到数据库服务器并执行查询。 这意味着每次更新时,java程序都会联系数据库服务器并执行查询。 现在,如果我们使用JDBC批处理更新,则java应用程序只需要与数据库服务器联系一次,并在数据库服务器上执行所有查询并返回到java应用程序。

简而言之,它将减少java应用程序和数据库服务器之间的往返。 通常两者都在不同的服务器上,因此会减少大量的网络资源。 因此,它实现了更好的性能。