我想在一个自动生成密钥的表中插入很多行。 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个不同大小的预备报表。然后将我的“批量查询”分解为尽可能小的语句。
更快的方法是什么?
答案 0 :(得分:1)
取决于。
我没有数字,executeBatch()
实际上是否比重复使用PreparedStatement
更快,所以我的建议如下:
尝试getGeneratedKeys()
是否适用于您的JDBC驱动程序。如果它不起作用,批量插入无论如何都不适合你。
为两者编写测试用例并测量性能。这为您提供了基于您的决策的真实数据。其他一切都只是猜测(90%的时间都是错误的)。
[编辑] 如果您想让您的应用程序数据库无关,请将测试添加到您的应用程序并在临时/测试表上运行它。如果测试成功,则选择使用批量更新的实现,否则回退到暴力。