Java sql date time

Когда я вставляю SQL DateTime в базу данных, я получаю 2007-02-07 12:00:00.00

Но я создал объект Date следующим образом: 2007-02-07 17:29:46.00

Как получить значение секунд в базе данных. Он всегда меняет его на 12:00:00.00

date.setYear(Integer.valueOf(parsedDate[2].replaceAll(" ", "")) - 1900);
date.setMonth(Integer.valueOf(parsedDate[0].replaceAll(" ", "")));
date.setDate(Integer.valueOf(parsedDate[1].replaceAll(" ", "")));
...
java.sql.Date sqlDate = new java.sql.Date(date.getTime());

Должен ли я использовать любые форматиры?

Ответы

Ответ 1

java.sql.Date обозначает дату, а не дату и время. Из документы:

Чтобы соответствовать определению SQL DATE, значения миллисекунды, обернутые экземпляром java.sql.Date, должны быть "нормализованы", установив часы, минуты, секунды и миллисекунды на ноль в конкретном часовом поясе, с которым экземпляр связан.

Если вы хотите сохранить дату и время, вы должны искать другой тип - например, java.sql.Timestamp. EDIT: Это не означает, что вы используете тип столбца TIMESTAMP - как говорит paulsm4 в комментариях, это другое дело. Однако, насколько я вижу, JDBC поддерживает только:

  • Date (нет, вам тоже нужно время)
  • Time (нет, вы тоже хотите дату)
  • Timestamp (включает дату и время, но вам не нужна семантика SQL TIMESTAMP)

Я ожидал бы использования типа Java Timestamp с столбцом DATETIME, хотя бы без уровня точности, который предоставляет Timestamp.

EDIT: после немного большего количества исследований, похоже, что вы можете использовать тип java.sql.Time, но со специальными параметрами драйвера - по крайней мере, если вы используете драйвер Microsoft. Для получения дополнительной информации см. Эти документы в настройке JDBC.