2

我想在自动生成键的表中插入很多行。JDBC 不保证获取生成的密钥将适用于批量更新。

It is implementation-defined as to whether getGeneratedKeys will return generated values after invoking the executeBatch method.(JDBC 4.0 规范 2006,第 135 页)。

我有两个选择。分别插入每一行并获取键。或者进行批量插入然后查询键。

为了避免查询多个键的往返,我可以在这里使用这种方法。有例如 5 个不同大小的准备好的语句。然后将我的“批量查询”分解成尽可能小的语句。

更快的方法是什么?

4

1 回答 1

1

这取决于。

我没有数字是否executeBatch()实际上比PreparedStatement重复使用更快,所以我的建议是:

  1. 尝试是否getGeneratedKeys()适用于您的 JDBC 驱动程序。如果它不起作用,那么批量插入无论如何都不会为您工作。

  2. 为两者编写一个测试用例并测量性能。这为您提供了真实的数据来做出决定。其他一切都只是猜测(而且 90% 的时间都是错误的)。

[编辑]如果您想让您的应用程序数据库不可知,请将测试添加到您的应用程序并在临时/测试表上运行它。如果测试成功,则选择使用批量更新的实现,否则回退到蛮力。

于 2011-06-14T11:54:56.967 回答