JDBC要求Sybase的时间戳偏移一小时?

问题描述 投票:1回答:1

在我查询有关事件的信息的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_timeend_time都是93型或时间戳。

请注意第二个事件应该从00:07开始,已经过了一个小时到达过去23:07

这个一小时的偏差在哪里出错?

java timestamp sybase
1个回答
2
投票

通过将JDBC数据库驱动程序从build 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
© www.soinside.com 2019 - 2024. All rights reserved.