问题描述
||
我想在自动生成键的表中插入很多行。 JDBC不保证获取生成的密钥可以批量更新。
It is implementation-defined as to whether getGeneratedKeys will return
generated values after invoking the executeBatch method.
(JDBC 4.0规范2006,第135页)。
我有两个选择。分别插入每一行并获取密钥。或者批量插入然后查询密钥。
为了避免往返查询多个键,我可以在这里使用这种方法。有例如5个准备好的不同大小的语句。然后将我的“批量查询”分解为最小的语句。
什么是更快的方法?
解决方法
这取决于。
我没有数字
executeBatch()
是否实际上比重复使用PreparedStatement
快,所以我的建议是:
尝试ѭ3是否适用于您的JDBC驱动程序。如果它不起作用,则批处理插入将仍然对您不起作用。
为这两者编写一个测试用例并评估性能。这将为您提供真实的数据,以供您做出决策。其他所有事情都是猜测(错误的情况是90%)。
[EDIT]如果您想使应用程序数据库不可知,请将测试添加到您的应用程序中,然后在临时表/测试表上运行它。如果测试成功,请选择一个使用批处理更新的实现,否则请使用蛮力。