【问题标题】:jdbc batch insert and query vs single inserts with gernerated keyjdbc 批量插入和查询与使用生成键的单次插入
【发布时间】: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个不同大小的准备好的语句。然后将我的“批量查询”分解成尽可能小的语句。

更快的方法是什么?

【问题讨论】:

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


    【解决方案1】:

    视情况而定。

    我不知道executeBatch() 是否比反复使用PreparedStatement 更快,所以我的建议是:

    1. 试试getGeneratedKeys() 是否适用于您的 JDBC 驱动程序。如果它不起作用,那么批处理插入对您也不起作用。

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

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

    【讨论】:

    • 哦,我虽然 getGeneratedKeys() 是驱动程序必须的,但它不是。如果可能的话,我想保持应用程序数据库的独立性。
    猜你喜欢
    • 2017-08-13
    • 2023-03-18
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2013-10-11
    • 2011-02-28
    相关资源
    最近更新 更多