В JDBC при вызове PreparedStatement.setArray () как указать часовой пояс для массива временных меток? - PullRequest
4 голосов
/ 27 октября 2011

В настоящее время, используя JDBC, если я хочу установить для столбца базы данных значение метки времени и сделать так, чтобы база данных интерпретировала его как метку времени UTC, я бы сделал это:

PreparedStatement pst = connection.prepareStatement(sql);
pst.setTimestamp(1, timestampValue, Calendar.getInstance(TimeZone.getTimeZone("UTC"));

но теперь я хочу сделать то же самое, но для массива временных меток:

pst.setArray(1, timestampValues);

где timestampValues ​​- это массив меток времени (а столбец базы данных имеет тип «timestamp []», например, в Postgresql. Я не вижу, где я могу указать драйверу JDBC, что каждое значение Timestamp в массиве должно быть рассматривается как UTC?

Ответы [ 2 ]

0 голосов
/ 31 января 2013

User connection.createArrayOf (..) как описано здесь http://docs.oracle.com/javase/tutorial/jdbc/basics/array.html

0 голосов
/ 27 октября 2011

Полагаю, вам придется сразу же настроить их на UTC. Кроме того, приведенный ниже код переопределяет TimeZone, используемый вашей JVM, чтобы он использовал UTC для всего. Затем, если вам нужно не UTC, вы можете использовать SimpleDateFormat, чтобы изменить его (например, для ведения журнала).

Я сослался на следующий пост для информации о часовом поясе.

TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
TimeZone.setDefault(utcTimeZone);
Calendar calendar = Calender.getInstance(utcTimeZone);

....//set the calendar values here.
//i'll just give you an example with a loop, you'll have to customize.
java.sql.Timestamp [] array = new java.sql.Timestamp [5];
for(int i=0; i < array.lenght; i++) {
  array[i] = new java.sql.Timestamp(calendar.getTimeInMillis());
}

PreparedStatement pst = connection.prepareStatement(sql);
pst.setArray(1, array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...