jdbc批量插入和查询与单个插入生成的密钥

时间:2011-06-14 11:50:42

标签: select jdbc insert prepared-statement batch-updates

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

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

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

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

更快的方法是什么?

1 个答案:

答案 0 :(得分:1)

取决于。

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

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

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

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