3

我在 Mysql Server 5.5 的服务器端使用 tomcat。

我使用 Spring 框架进行数据库连接。

我希望能够使用 simpleJdbcInsert 向表中插入一行。如果插入因重复而失败,我希望它替换重复的行。

有没有办法做到这一点 simpleJdbcInsert 或者我应该只使用 jdbcTemplate 并使用“ON DUPLICATE”语句创建我的查询?

谢谢

4

2 回答 2

1

从逻辑上讲,当存在双主键时会发生重复。

因此,如果您使用的是传统的 JDBC 甚至 Hibernate,那么您应该在插入新的主键值之前检查是否已经存在相同的主键值。

但如果主键尚未设置,或者将由 DBMS 设置,则会出现不同的问题。

  1. 在 JDBC 中,您需要在插入新的之前通过查询再次进行旧式手动检查,但是

  2. 在 Hibernate 中,您只需要更新它。如果没有重复,Hibernate 将创建新的,但如果有重复,则将替换。

于 2012-03-06T12:08:53.017 回答
1

在 JDBC 中,您需要在插入新的之前通过查询再次进行旧式手动检查,但是

这是不正确的 - 因为在检查现有行和实际插入之间存在时间间隔,所以并行线程中的某个人可以同时插入具有相同键的行,您将获得DuplicateKeyException(如果我们谈论 spring)。所以,你必须处理这个异常或者只使用诚实的 SQL insert into ... on duplicate key ...

于 2021-01-25T12:30:04.647 回答