在使用Spring JDBC batchUpdate时,是否仍然可以获取生成的密钥?

2022-09-03 02:42:01

我正在使用JDBC并希望批量插入,但是我需要为下一轮插入生成的密钥 - 无论如何都可以完成此操作吗?

MapSqlParameterSource[] batchArgs ....

DAL.getNamedParameterTemplate().batchUpdate("INSERT INTO...", batchArgs);

谢谢


答案 1

Spring框架的人试图解决这个问题。但是,当很明显没有办法保证该解决方案适用于所有JDBC驱动程序时,他们放弃了尝试。这是因为 JDBC 规范不保证生成的密钥在批量更新后可用。JDBC 驱动程序可以自由地实现他们认为合适的功能。在某些情况下,基础数据库可能不会返回生成的密钥,从而使驱动程序无法支持此功能。

因此,即使您直接使用 JDBC,也需要检查数据库和 JDBC 驱动程序是否使生成的密钥可用。

我记得我能够通过MySQL 5.0 JDBC驱动程序实现这一点,但从未将解决方案集成到我们的生产应用程序中,因为我们也必须支持旧版本的MySQL。


答案 2

使用 db 序列获取下一个主键值,并在 insert 语句中使用它。


推荐