我在 Mysql Server 5.5 的服务器端使用 tomcat。
我使用 Spring 框架进行数据库连接。
我希望能够使用 simpleJdbcInsert 向表中插入一行。如果插入因重复而失败,我希望它替换重复的行。
有没有办法做到这一点 simpleJdbcInsert 或者我应该只使用 jdbcTemplate 并使用“ON DUPLICATE”语句创建我的查询?
谢谢
我在 Mysql Server 5.5 的服务器端使用 tomcat。
我使用 Spring 框架进行数据库连接。
我希望能够使用 simpleJdbcInsert 向表中插入一行。如果插入因重复而失败,我希望它替换重复的行。
有没有办法做到这一点 simpleJdbcInsert 或者我应该只使用 jdbcTemplate 并使用“ON DUPLICATE”语句创建我的查询?
谢谢
从逻辑上讲,当存在双主键时会发生重复。
因此,如果您使用的是传统的 JDBC 甚至 Hibernate,那么您应该在插入新的主键值之前检查是否已经存在相同的主键值。
但如果主键尚未设置,或者将由 DBMS 设置,则会出现不同的问题。
在 JDBC 中,您需要在插入新的之前通过查询再次进行旧式手动检查,但是
在 Hibernate 中,您只需要更新它。如果没有重复,Hibernate 将创建新的,但如果有重复,则将替换。
在 JDBC 中,您需要在插入新的之前通过查询再次进行旧式手动检查,但是
这是不正确的 - 因为在检查现有行和实际插入之间存在时间间隔,所以并行线程中的某个人可以同时插入具有相同键的行,您将获得DuplicateKeyException
(如果我们谈论 spring)。所以,你必须处理这个异常或者只使用诚实的 SQL insert into ... on duplicate key ...
。