java.lang.ClassCastException: oracle.sql.TIMESTAMP を java.sql.Timestamp にキャストできません 質問する

java.lang.ClassCastException: oracle.sql.TIMESTAMP を java.sql.Timestamp にキャストできません 質問する

私はネットワーク経由でResultSetをストリーミングするアプリケーションに取り組んでいます。最終的にはCachedRowSetImplクラスを使用しました。しかし、Oracle DBに接続すると、次のようなエラーが発生します。

java.lang.ClassCastException: oracle.sql.TIMESTAMP を 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 を java.sql.Timestamp にキャストできません java.lang.ClassCastException: oracle.sql.TIMESTAMP を java.sql.Timestamp にキャストできません (com.sun.rowset.CachedRowSetImpl.getDate(CachedRowSetImpl.java:2139))

ベストアンサー1

JavadocのResultSet.getObject()JDBC 仕様で規定されているように、JDBC 型を Java 型にマップする必要があります (TIMESTAMP -> java.sqlTimestmp)。

このメソッドは、指定された列の値を Java オブジェクトとして返します。Java オブジェクトの型は、JDBC 仕様で指定された組み込み型のマッピングに従って、列の SQL 型に対応するデフォルトの Java オブジェクト型になります。

ご存知のとおり、Oracleドライバはデフォルトで標準に準拠していない代わりにを使用しますoracle.sql.TIMESTAMP( は を拡張しませんjava.sql.Timestamp)。良いニュースは、 を設定することでJDBC準拠を強制できることです。oracle.jdbc.J2EE13準拠trueVM 起動時のシステム プロパティ:

java -Doracle.jdbc.J2EE13Compliant=true YourApplication

またはプログラム的に

System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")

java.sql.Timestampこれを実行すると、getResult() は期待どおりにのインスタンスを返します。

詳細については、Oracle JDBC ドライバーのドキュメントoracle.jdbc.J2EE13Compliant を設定するいくつかの方法について説明しています。

おすすめ記事