ResultSet for Oracle数据库

时间:2016-05-24 15:56:23

标签: java oracle jdbc resultset

我面临一个奇怪的问题,即JDBC中的数字和日期字段的值与ResultSet返回的值不同。

我在数据库中有以下行(仅显示与该问题相关的3列)

J_ID       J_DATE              J_AMOUNT
1          29-JAN-16           2.339549839

我正在使用标准JDBC从DB中获取此行,如下所示:

while (rs.next()) {
   System.out.println(rs.getDouble("J_AMOUNT"));
   Timestamp ts = rs.getTimestamp("J_DATE");
   Date d = ts != null ? new java.util.Date(ts.getTime()) : null;
   System.out.println(d);
}

输出结果为:

2.345773196 Thu Mar 31 00:00:00 IST 2016

我正在试图弄明白为什么 2.339549839 getDouble读为 2.345773196 以及为什么 29-JAN-16 通过getDate方法转换为 Thu Mar 31 00:00:00 IST 2016

我正在使用Oracle数据库和odbc5.jar。我发现了一个相关的问题,但它似乎没有任何答案,评论也没有回答我的问题:

  1. ResultSet getDouble giving incorrect values.

  2. ResultSet.getInt return wrong value

  3. Wrong long value from ResultSet.getTimeStamp().getTime()

  4. 我显然做错了什么但不确定它可能是什么,因为这是一个非常基本的程序。

    其他信息:

    1. 执行查询以获取我的程序记录的结果集如下:

      SELECT B.J_ID, B.J_DATE, ROUND(B.J_AMOUNT, 9) FROM REF.J_MESSAGES B WHERE B.J_ID = 1

    2. 转换为时间时J_DATE字段的值

      SELECT B.J_ID, to_char(B.J_DATE, 'YYYY-MM-DD HH24:MI:SS') as J_DATE, ROUND(B.J_AMOUNT, 9) FROM REF.J_MESSAGES B WHERE B.J_ID = 1

      J_ID J_DATE J_AMOUNT 1 2016-01-29 00:00:00 2.339549839

    3. 使用getString代替getDoublegetTimeStamp会得到以下输出:

      2.345773196 2016-03-31 00:00:00.0

    4. 我正在使用SQL开发人员在我的oracle数据库上手动执行查询,并且我已经确认我在Java和SQL开发人员中使用了正确的数据库,模式,表和Oracle实例。

    5. 这是我桌子上的描述(仅列出与此问题相关的列):

         Name              Null     Type          
      
         J_DATE                     DATE  
         J_AMOUNT                   NUMBER(30,14)
      
    6. JDBC驱动程序版本是: JDBC driver version is 11.1.0.6.0-Production+

    7. 我创建了自己的表,只有2列(J_DATE和J_AMOUNT),这个问题在这个表上也是可以重现的,所以它不太可能是某种同步问题,其中表被另一个系统更新时读取。

0 个答案:

没有答案