jdbc 批量插入和查询与使用生成键的单次插入
Posted
技术标签:
【中文标题】jdbc 批量插入和查询与使用生成键的单次插入【英文标题】:jdbc batch insert and query vs single inserts with gernerated key 【发布时间】:2011-06-14 11:50:41 【问题描述】:我想在自动生成键的表中插入很多行。 JDBC 不保证获取生成的密钥对批量更新有效。
It is implementation-defined as to whether getGeneratedKeys will return
generated values after invoking the executeBatch method.
(JDBC 4.0 规范 2006,第 135 页)。
我有两个选择。分别插入每一行,得到key。或者批量插入,然后查询key。
为了避免查询多个键的往返,我可以使用这种方法here。有例如5个不同大小的准备好的语句。然后将我的“批量查询”分解成尽可能小的语句。
更快的方法是什么?
【问题讨论】:
【参考方案1】:视情况而定。
我不知道executeBatch()
是否比反复使用PreparedStatement
更快,所以我的建议是:
试试getGeneratedKeys()
是否适用于您的 JDBC 驱动程序。如果它不起作用,那么批处理插入对您也不起作用。
为两者编写测试用例并测量性能。这为您提供了真实的数据来做出决定。其他一切都只是猜测(90% 的时候都是错误的)。
[编辑]如果您想让您的应用程序数据库不可知,请将测试添加到您的应用程序并在临时/测试表上运行它。如果测试成功,则选择使用批量更新的实现,否则回退到暴力破解。
【讨论】:
哦,我虽然getGeneratedKeys()
是驱动程序必须的,但它不是。如果可能的话,我想保持应用程序数据库的独立性。以上是关于jdbc 批量插入和查询与使用生成键的单次插入的主要内容,如果未能解决你的问题,请参考以下文章