Перед записью даты Java в столбец TIMESTAMP SQL переводит ли JDBC дату из часового пояса JVM в базу данных часовой пояс сеанса?

Если приведение не выполнено, ключевое слово «as» не вызывает исключение; вместо этого он устанавливает переменную в null (или в ее значение по умолчанию для типов значений).

26
задан Derek Mahar 8 November 2010 в 11:50
поделиться

2 ответа

Теперь мое требование заключается в том, чтобы оно сохраняло значение в GMT / UTC независимо от часового пояса JVM. Есть ли способ установить часовой пояс на лету, а затем сбросить его, как только я закончу с JDBC?

Правка: Хорошо, я нашел способ обойти эту проблему. Сделал следующее

TimeZone default = TimeZone.getDefault();
try
{
  TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

  //Do stuff with JDBC
}
finally
{
  TimeZone.setDefault(default);
}
7
ответ дан 28 November 2019 в 17:19
поделиться

Спекуляция тупая. Java.util.Date хранит миллисекунды с эпохи в системе отсчета GMT. Java.sql.Timestamp - это дата плюс наносекунды в той же системе отсчета. Все недешевые методы получения и установки используют систему отсчета GMT. Для любого вида здравомыслия часовой пояс по умолчанию для хранения метки времени должен быть GMT.

В многоуровневом приложении внешний интерфейс, драйвер и сервер базы данных могут находиться в разных часовых поясах. Некоторые из уровней могут быть в разных часовых поясах одновременно; например, если вы выполняете балансировку нагрузки через Интернет на континенте или если у вас есть мобильное приложение, подключающееся к центральному серверу. Облачная операционная среда была бы во многом таким же сценарием, когда вы не знаете, где будет работать драйвер JDBC, и не можете гарантировать, что он никогда не изменится.

Единственный способ, которым я знаю для достижения согласованности в этих средах, - это использовать только набор параметров и метод ResultSet, которые принимают Календарь, и убедиться, что каждое приложение, которое обращается к данным, использует какой-то календарь, предпочтительно GMT или UTC.

-1
ответ дан 28 November 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: