Я получаю SqlException
на PreparedStatement
за нарушение ограничения уникальности на таблице (ключ обмана). По существу моя таблица выглядит следующим образом:java.util.Date to java.sql.Date не содержит времени
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
инстанции.
Точная ошибка, которую я вижу (ключ обмана), продолжает жаловаться на то, что я пытаюсь вставить 2015-05-27 00:00:00.0000000
в таблицу для buzz_timestamp
, но она уже существует. Таким образом, очевидно, что я неправильно использую API Date, и я вставляю даты, у которых есть нулевые компоненты времени, и тем самым производятся исключения для исключения дублирования.
Так что я спрашиваю: Как исправить это, чтобы я действительно вставлял дату и время для «сейчас»?
Проверить этот вопрос: http://stackoverflow.com/questions/6777810/a-datetime-equivalent-in-java-sql-is-there-a-java-sql-datetime – iouhammi
Если вы используя Java 8, перейдите в [java.time.LocalDateTime] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html) вместо [java.util.Date] (https://docs.oracle.com/javase/7/docs/api/java/util/Date.html) – Arrigo