gpt4 book ai didi

java - 使用 getGeneratedKeys 在带有 Connector/J 的 MySQL 中批量插入

转载 作者:IT老高 更新时间:2023-10-29 00:01:01 26 4
gpt4 key购买 nike

使用 Connector/J,我想批量插入主表,然后批量插入详细信息表(PreparedStatement.executeBatch() 两者都适用)。我在网上没有找到太多信息,所以我正在寻找有这方面经验的人的任何反馈。

  1. 我可以用吗Statement.getGeneratedKeys() 来获取新插入行的 ID在主表中,这样我就可以使用它们作为外键细节插入?

  2. 如果不是每个查询都有结果怎么办?插入(例如,有一个 insert
    忽略
    insert ... 重复
    key 更新
    查询)?我会得到一排在 Statement.getGeneratedKeys() 中为每个声明,还是只针对新声明?

  3. 会发生什么Statement.getGeneratedKeys() 返回其中一个有错误插入的主记录,和continueBatchOnError 设置为 true在连接字符串中?

  4. Connector/J 版本 5.0.x 和 5.5.x 之间的相关行为有什么不同吗? MySQL 5.0 与 5.1 怎么样?

  5. 还有什么我应该注意的其他问题或陷阱吗?

  6. 有没有更好的方法来做到这一点?

最佳答案

好吧,我进行了一些测试。使用 Connector/J 5.1 和 MySQL 5.1.42,我观察到以下内容:

  1. Statement.getGeneratedKeys() 按预期方式进行插入

  2. 如果插入或更新了一行(executeBatch() 返回的更新计数数组返回 '1' 或 '2'),Statement.getGeneratedKeys() 将具有该行的键。如果该行未被修改(insert ignoreinsert ... on duplicate key update 导致无操作,executeBatch()返回 3),没有 key 。

  3. getGeneratedKeys 返回的结果集将包含成功插入行的条目,如 (2) 所示。不会为失败的插入生成键行(其中更新计数值为 Statement.EXECUTE_FAILED)

  4. ?

  5. 注意 JDBC 连接字符串中的 rewriteBatchedStatements。如果它设置为 true,任何失败都将导致重写的“ block ”中的每一行都被视为失败。处理此问题的一种方法是迭代失败的行并在不进行批处理的情况下重试。

  6. ?

关于java - 使用 getGeneratedKeys 在带有 Connector/J 的 MySQL 中批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4952316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com