用simpleJdbcInsert替换副本

时间:2012-03-06 11:47:20

标签: java mysql spring simplejdbcinsert

我使用tomcat作为我的服务器端与Mysql Server 5.5。

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

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

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

谢谢

2 个答案:

答案 0 :(得分:1)

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

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

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

    在JDBC中
  1. ,再次需要通过查询来执行旧式手动检查,然后再插入新的,但

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

答案 1 :(得分:1)

<块引用>

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

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