11

每个人都说批量更新减少了 JDBC 调用的数量。有人可以解释一下“JDBC 调用”是什么意思,以及与在一个 JDBC 调用中承载全部负载相比,增加此类调用的数量是多么昂贵。

4

3 回答 3

11

通俗地说,当开发人员使用短语JDBC 调用时,他们谈论的是通过线路将信息发送到数据库。JDBC API 的批处理功能允许您在单个网络调用中提交多个离散操作,而不是对每个 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();
于 2013-01-10T18:55:55.360 回答
5

IBM 文档中所述:

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

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

于 2013-01-10T18:58:11.327 回答
1

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

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

于 2013-01-10T19:04:36.447 回答