Oracle 12c ojdbc7驱动程序导致result.getString问题(" DATE_COLUMN")

时间:2015-08-07 17:33:57

标签: oracle

我们正在升级到Oracle 12c,因此正在使用ojdbc7(12.1.0.2.0)驱动程序。但是我们注意到,在使用resultSet.getString(" DATE_COLUMN")从表中获取DATE列时,它现在也返回DayLight Saving调整时间。请注意,该数据库位于美国中部时区。

比如说。

如果最初插入的列中的日期是" 2014-03-09 02:30:00"这就是2014年美国夏令时开始的那一天。

以下是用于获取此值的代码行。

  String sql = "SELECT DATE_COLUMN FROM A_TABLE";
     ResultSet rs = psmt.executeQuery(sql);
     while (rs.next())
     {
        String dateString = rs.getString("DATE_COLUMN");
     }

以下是此代码段与2种不同驱动程序的结果。

odjbc6(11.2.0.3.0) - 2014-03-09 02:30:00

ojdbc7(12.1.0.2.0) - 2014-03-09 03:30:00.0

如果您看到突出显示的时间字段,您可以看到它现在使用ojdbc7驱动程序获取3:30:00.0而不是2:30,这表明驱动程序正在获取当地时区的夏令时调整时间数据库服务器,在我们的例子中是美国的CST。

我得到的部分是附加此链接ResultSet.getString(Date) differs based on driver

中提到的小数秒

问题是我们不需要夏令时调整时间,但需要最初插入的时间。但是,使用其他方法获取日期(如resultSet.getDate()),resultSet.getTimeStamp()也会返回DST调整时间。

我们发现唯一的出路是将日期列的类型更改为TIMESTAMP并解决问题。

有没有人遇到过oracle 12c(ojdbc7)驱动程序的这个问题?

如果是,是否有更好的解决方法?我真的想避免将现有列的数据类型更改为TIMESTAMP。

1 个答案:

答案 0 :(得分:0)

遇到同样的问题。我使用rs.getString(index)来避免Date类型的夏令时调整,但使用ojdbc7时,rs.getString(index)也会调整夏令时。