Java Oracle数据库的结果集返回的值错误

Java Oracle数据库的结果集返回的值错误,java,oracle,jdbc,resultset,Java,Oracle,Jdbc,Resultset,我在JDBC中遇到了一个奇怪的问题,即数据库中数字和日期字段的值与ResultSet返回的值不同 我在数据库中有以下行(仅显示与问题相关的3列) 我使用标准JDBC从数据库中获取此行,如下所示: while (rs.next()) { System.out.println(rs.getDouble("J_AMOUNT")); Timestamp ts = rs.getTimestamp("J_DATE"); Date d = ts != null ? new java.util

我在JDBC中遇到了一个奇怪的问题,即数据库中数字和日期字段的值与
ResultSet
返回的值不同

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

我使用标准JDBC从数据库中获取此行,如下所示:

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
2016年3月31日星期四00:00:00 IST

我挠头想弄明白为什么2.339549839被
getDouble
解读为2.345773196,为什么2016年1月29日被
getDate
方法转换为2016年3月31日星期四00:00:00

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

  • 我显然做错了什么,但不确定会是什么,因为这是一个非常基本的程序

    其他信息:

  • 为获取程序记录的结果集而执行的查询如下:

    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);
    }
    
    从REF.J_MESSAGES B中选择B.J_ID、B.J_DATE、ROUND(B.J_金额,9),其中B.J_ID=1

  • 转换为时间时,
    J_DATE
    字段的值

    从REF.J_消息B中选择B.J_ID,to_char(B.J_日期,'YYYY-MM-DD HH24:MI:SS')作为J_日期,四舍五入(B.J_金额,9),其中B.J_ID=1

    J_ID J_日期J_金额
    1 2016-01-29 00:00:00 2.339549839

  • 使用
    getString
    而不是
    getDouble
    getTimeStamp
    可获得以下输出:

    2.345773196
    2016-03-31 00:00:00.0

  • 我正在使用SQLDeveloper在我的oracle数据库上手动执行查询,我已经确认我在Java和SQLDeveloper中找到了正确的数据库、模式、表和oracle实例

  • 以下是我表格上的描述(仅列出与此问题相关的列):

  • JDBC驱动程序版本为:
    JDBC驱动程序版本是11.1.0.6.0-Production+

  • 我创建了我自己的表,只有2列(J_DATE和J_AMOUNT),这个问题在这个表上也是可复制的,所以不太可能是某种同步问题,在另一个系统更新时读取表


  • 尝试获取字符串形式的值,以检查它们是什么。rs.getString()首先检查这些值是否与数据库表中的任何位置匹配,这将确保这不是数据问题。确保RS只从一个查询中引用,而不是从多个查询中引用,因为这会造成扭曲data@scarecrow-说得好。我在这个问题上花了几个小时,这是我自己检查过的事情之一。DB表中没有任何数值列的值,我已确认我在查询中选择了相同的表。。。您是否可以编辑该问题以添加通过JDBC执行的实际语句以获得结果集?还显示表的J_DATE值及其时间(
    to_char(J_DATE,'YYYY-MM-DD HH24:MI:SS'
    )?我肯定我错了,但这让我怀疑*8-)也许您可以发布一个sql表定义,这样我们就可以确保oracle中的数据类型是正确的?还有什么理由不尝试使用其他jdbc驱动程序来确保它不是驱动程序问题吗?
       Name              Null     Type          
    
       J_DATE                     DATE  
       J_AMOUNT                   NUMBER(30,14)