gpt4 book ai didi

oracle - java.lang.ClassCastException : oracle. sql.TIMESTAMP 无法转换为 java.sql.Timestamp

转载 作者:行者123 更新时间:2023-12-03 11:35:03 26 4
gpt4 key购买 nike

我正在开发一个通过网络流式传输 ResultSet 的应用程序。我最终使用了 CachedRowSetImpl 类。但是当我连接到 Oracle DB 时,出现这样的错误

java.lang.ClassCastException: oracle.sql.TIMESTAMP cannot be cast to java.sql.Timestamp



请帮忙。

源代码如下:
ResultSet res = response.getResultSet(); //resultset from the server
while (res.next()) {
Agent agent = new Agent();
agent.setName(res.getString(2));
agent.setMobile(res.getString(1));
agent.setBalance(res.getLong(4));
agent.setLastUpdate(res.getDate(3)); //date from the result set
agent.setAccountNumber(res.getString(5));
}

错误 ...

java.lang.ClassCastException: oracle.sql.TIMESTAMP cannot be cast to java.sql.Timestamp java.lang.ClassCastException: oracle.sql.TIMESTAMP cannot be cast to java.sql.Timestamp at com.sun.rowset.CachedRowSetImpl.getDate(CachedRowSetImpl.java:2139)

最佳答案

ResultSet.getObject() 的 javadoc要求 JDBC 类型应映射到 JDBC 规范(TIMESTAMP -> java.sqlTimestmp)规定的 Java 类型:

This method will return the value of the given column as a Java object. The type of the Java object will be the default Java object type corresponding to the column's SQL type, following the mapping for built-in types specified in the JDBC specification.



如您所见,Oracle 驱动程序默认为 不符合标准并使用 oracle.sql.TIMESTAMP相反(不扩展 java.sql.Timestamp )。好消息是您可以通过设置 来强制 JDBC 合规性。 oracle.jdbc.J2EE13Compliant 系统属性到 true在虚拟机启动期间:
java -Doracle.jdbc.J2EE13Compliant=true YourApplication

或以编程方式
System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")

执行此操作后,getResult() 将返回 java.sql.Timestamp 的实例。 ,正如预期的那样。

有关更多详细信息,请参阅 Oracle JDBC Driver Documentation 中的相关部分,描述了设置 oracle.jdbc.J2EE13Compliant 的几种方法。

关于oracle - java.lang.ClassCastException : oracle. sql.TIMESTAMP 无法转换为 java.sql.Timestamp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13269564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com