Java Oracle数据库的结果集返回的值错误
我在JDBC中遇到了一个奇怪的问题,即数据库中数字和日期字段的值与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
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
JDBC驱动程序版本是11.1.0.6.0-Production+
尝试获取字符串形式的值,以检查它们是什么。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)