【发布时间】:2015-08-09 08:07:40
【问题描述】:
我在PreparedStatement 上收到SqlException,因为它违反了表上的唯一性约束(重复键)。基本上我的表是这样的:
mytable
=======
mytable_id PRIMARY KEY INT NOT NULL
fizz_id INT NOT NULL
buzz_timestamp DATETIME
唯一性约束在buzz_timestamp上;也就是说,没有 2 条记录可能具有相同的日期/时间“时间戳”。
将记录插入此表的PreparedStatement 如下所示:
PreparedStatement ps = conn.prepareStatement(insertQuery);
ps.setDate(1, new java.sql.Date(new java.util.Date().getTime()));
所以你可以看到我正在使用 java.util.Date()(“现在”)并将其转换为 java.sql.Date 实例。
我看到的确切错误(dupe key)一直抱怨我试图将2015-05-27 00:00:00.0000000 插入到buzz_timestamp 的表中,但它已经存在。因此,很明显,我使用了错误的 Date API,并且我插入了具有无效时间组件的日期,从而产生了重复密钥异常。
所以我问:我该如何纠正这个问题,以便我真正为“现在”插入日期和时间?
【问题讨论】:
-
如果您使用的是 Java 8,请使用 java.time.LocalDateTime 而不是 java.util.Date
标签: java sql-server date timestamp sqlexception