我正在使用JDBC并想要批量插入,但是我需要为下一轮插入生成的密钥 - 无论如何要实现这一点吗?
MapSqlParameterSource[] batchArgs ....
DAL.getNamedParameterTemplate().batchUpdate("INSERT INTO...", batchArgs);
由于
答案 0 :(得分:9)
Spring框架人员attempted a solution解决了这个问题。但是当它们显然无法保证解决方案适用于所有JDBC驱动程序时,他们放弃了尝试。这是因为JDBC规范不保证在批量更新后生成的密钥可用。 JDBC驱动程序可以根据需要随意实现此功能。在某些情况下,底层数据库可能不会返回生成的密钥,因此驱动程序无法支持此功能。
因此,即使您直接使用JDBC,也需要检查数据库和JDBC驱动程序是否使生成的密钥可用。
我记得我能够通过MySQL 5.0 JDBC驱动程序实现这一目标,但从未在我们的生产应用程序中集成解决方案,因为我们也必须支持旧版本的MySQL。
答案 1 :(得分:0)
使用db sequences获取下一个主键值并在insert语句中使用它。