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