JDBC спрашивает временные метки из Sybase, смещенные на час? - PullRequest
1 голос
/ 08 марта 2019

В базе данных Sybase есть процедура базы данных (к которой у меня нет доступа, поэтому я не могу просмотреть ее источник или отредактировать), и эти события имеют начало и конец дата.

РЕДАКТИРОВАТЬ: Этот эффект также происходит, когда я запросил недавно созданную таблицу только дат, созданную так:

create table jvo_test.test_dates(dt datetime not null primary key)
insert into jvo_test.test_dates(dt) select  dateadd(mi, (id-1) *30, '2019-03-06 00:00:00') from rle.row_generator where id between 1 and 48

КОНЕЦ РЕДАКТИРОВАНИЯ

Проблема в том, что когда эти события происходят через час после полуночи (то есть в диапазоне 00:00 - 01:00), полученная метка времени возвращается назад за час ???

Пример: прямо сейчас процедура возвращает два события, одно в 23:44, а другое в 00: 07

Код:

Connection c = ds.getConnection();
String sql = "procedure_name 'param1', 'param2', 'param3'";
PreparedStatement ps = c.prepareStatement(sql);

ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next()) {
    for(int i = 1; i < rsmd.getColumnCount(); i++) {
        log.debug("{} is of type: {}", rsmd.getColumnName(i), rsmd.getColumnType(i));
    }
    log.debug("AS STRING start_time: {}, end_time: {}",
        rs.getString("start_time"),rs.getString("end_time"));
    log.debug("AS TIMESTAMP start_time: {}, end_time: {}",
        rs.getTimestamp("start_time"),rs.getTimestamp("end_time"));
}

Это приводит к следующим строкам журнала

start_time is of type: 93
end_time is of type: 93
AS STRING start_time: 2019-02-19 23:44:23.000000, end_time: 2019-02-19 23:44:29.000000
AS TIMESTAMP start_time: 2019-02-19 23:44:23.0, end_time: 2019-02-19 23:44:29.0

start_time is of type: 93
end_time is of type: 93
AS STRING start_time: 2019-02-20 00:0-53:46.000000, end_time: 2019-02-20 00:0-53:53.000000
AS TIMESTAMP start_time: 2019-02-19 23:07:46.0, end_time: 2019-02-19 23:07:53.0

start_time и end_time имеют тип 93 или метку времени.

Обратите внимание, как второе событие, которое должно начаться в 00:07, переместилось на час назад в 23: 07

Где я ошибаюсь, чтобы получить это одночасовое смещение?

1 Ответ

2 голосов
/ 19 марта 2019

Проблема была решена путем обновления драйвера базы данных JDBC со сборки 26502 до 27361

Чтобы узнать версию вашего драйвера, выполните

java -jar jconn4.jar

Старая версия выводит это как первый ряд:

jConnect (TM) for JDBC(TM)/7.00(Build 26502)/P/EBF17993/JDK16/Thu Jun  3  3:09:09 2010

Новая версия выведет это:

jConnect (TM) for JDBC(TM)/7.07 SP139 (Build 27361)/P/EBF27161/JDK 1.6.0/jdbcmain/OPT/Thu Jul 27 02:39:00 PDT 2017
...