2013-06-27 4 views
1

Когда я пытаюсь использовать значение java.sql.Timestamp для вставки в столбец DATETIME в MySQL 5.6, я всегда получаю эту ошибку:java.sql.Timestamp ошибка при вставке в DATETIME

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'invoice_date' at row 1

Оригинальный разработчик этого проекта имел пользовательские JAR, которые создали подготовленные операторы, так что java.util.Date преобразуется в Timestamp для вставки в DATETIME и наоборот, а также для обработки подключений к базе данных. Обратите внимание, что это мое предположение, поскольку в нем нет документации. Попытка использовать временную метку для вставки в DATETIME себя через PreparedStatement были одни и те же результаты, используя что-то вроде:

ps.setTimestamp(3, new Timestamp(date.getTime()));

мне пришлось создать свою собственную связь, так что я могу использовать java.sql.Date, чтобы решить эту проблему. Однако в результате он обнуляет значение времени. Я использовал

ps.setDate(3, new java.sql.Date(date.getTime()));

И я получаю что-то вроде

2013-06-27 00:00:00

в таблице, так как мы знаем, java.sql.Date не сохраняет время.

Удивительно, но на сервере, использующем MySQL 5.0, это работает нормально. Я предполагаю, что значение миллисекунды в Timestamp приводит к тому, что проблема ливается в DATETIME? Поскольку оригинал работает в более старых версиях. Есть ли способ разрешить это без переустановки всего с 5.0?

+0

Использование Java.util.Date –

+0

Я не могу использовать java.util.Date в PreparedStatement. Сначала его нужно включить в java.sql.Date. –

ответ

1

Если проблема в миллисекундах, укажите формат даты вашей метки времени. Если прецедент преуспевает в MySQL 5.0, и у вас есть разные драйверы jdbc, развернутые в 5.0 и 5.6, стоит проверить этот драйвер над MySQL 5.6. Наконец, вы не передаете индекс в своих сеттерах, а неправильное значение даты и времени - это пустая строка. Вы проверили в отладчике/журналах, что вы не пытаетесь вставить пустую строку?

+0

О, извините, забыли включить индекс, когда я напечатал эти строки. Сам код имеет индекс, а журналы показывают, что они имеют значение. Я использую одни и те же драйверы jdbc на 5.0 и 5.6. Будет ли тип DATETIME брать строку? Я думал, что это должен быть только тип даты, например Date или Timestamp. –

+0

Просто попытался форматировать метку времени и использовать эту строку вместо этого, которая работала в моих тестах. Спасибо за помощь! По-прежнему необходимо установить для меня собственное соединение с базой данных, но это не поможет из-за пользовательских JAR. Я просто сделаю свои модификации, чтобы он работал как на 5.0, так и на 5.6. –

Смежные вопросы