当前位置: 首页 > 面试题库 >

在带有Connector / J的MySQL中将getGeneratedKeys与批处理插入一起使用

黄景胜
2023-03-14
问题内容

使用Connector /
J,我想在主表中进行批量插入,然后在明细表中进行批量插入(PreparedStatement.executeBatch()两者均适用)。我在网上找不到太多信息,因此我正在寻找有经验的人的任何反馈。

  1. 我可以 Statement.getGeneratedKeys()用来获取主表中新插入的行的ID,以便可以将它们用作详细信息插入中的外键吗?

  2. 如果不是每个查询都导致插入(例如有一个insert ignoreinsert ... on duplicate key update查询)怎么办?我是否会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 ignore或者insert ... on duplicate key update导致无操作,则executeBatch()返回3),则没有键。

  3. 返回的ResultSet getGeneratedKeys将具有(2)中成功插入的行的条目。失败的插入将不会生成密钥行(更新计数值为Statement.EXECUTE_FAILED

  4. 小心使用rewriteBatchedStatementsJDBC连接字符串。如果将其设置为true,则任何失败都将导致重写的“块”中的每一行都被视为失败。解决此问题的一种方法是遍历失败的行,然后不进行批处理而重试它们。



 类似资料:
  • 官方的 MySQL JDBC 驱动程序,目前最新版本是5.1.6,兼容 JDBC-4.0规范。 驱动类名:com.mysql.jdbc.Driver URL格式:jdbc:mysql://servername:port/database LGPL for  Connector/J 2.0.14, GPL for Connector/J 3.0.0

  • 26.3.1. 基本的JDBC概念 26.3.2. 安装 Connector/J 26.3.3. JDBC引用 26.3.4. 与J2EE和其他Java框架一起使用 Connector/J 26.3.5. 诊断 Connector/J方面的问题 26.3.6. Changelog 通过JDBC驱动,MySQL提供了与使用Java编程语言开发的客户端应用程序的连通性,该驱动称为MySQL Conne

  • 问题内容: 有没有解决方案通过hibernate在分区后的PostgreSQL表中批量插入?目前我遇到这样的错误… 我已经找到此链接http://lists.jboss.org/pipermail/hibernate- dev/2007-October/002771.html, 但我在网上找不到任何地方可以解决此问题或如何解决该问题 问题答案: 您可能想通过设置hibernate.jdbc.fac

  • 问题内容: 在MS SQL上,我可以使用以下sql命令进行批量插入: 现在我想在MySQL上做同样的事情,但是我似乎无法弄清楚它是如何工作的以及使用什么查询。 问题答案: 在MySQL中,等效项为 加载数据文件 http://dev.mysql.com/doc/refman/5.1/en/load- data.html

  • 问题内容: 我有一个dao,它基本上使用hibernate将记录插入到一​​个表中,该dao用标记为注释,并且我有一个服务,该服务会生成其他一些东西,然后调用我的dao。我的服务也标注了使用。 我叫服务循环。我在dao上的插入内容是否可以批量或一个接一个地工作?我如何确定它们可以批量工作?hibernateTransaction Manager是否管理批处理插入? 我正在使用Oracle DB。

  • 我很难让Hibernate在MySQL上执行大容量插入。 我有要排序的主键生成类型,下面是我的dao.xml 这使得每次都可以执行单个查询。我也相应地刷新和清除实体管理器。 技术堆栈:Spring 4,Hibernate 5.2。 编辑1:我也浏览了下面的链接,但没有运气 https://vladmihalcea.com/how-to-batch-insert-and-update-stateme