Oracle
 sql >> Datenbank >  >> RDS >> Oracle

java.lang.ClassCastException:oracle.sql.TIMESTAMP kann nicht in java.sql.Timestamp umgewandelt werden

Das Javadoc für ResultSet.getObject() schreibt vor, dass der JDBC-Typ einem Java-Typ zugeordnet werden sollte, wie von der JDBC-Spezifikation vorgeschrieben (TIMESTAMP -> java.sqlTimestmp):

Diese Methode gibt den Wert der angegebenen Spalte als Java-Objekt zurück. Der Typ des Java-Objekts ist der Standard-Java-Objekttyp, der dem SQL-Typ der Spalte entspricht, gemäß der Zuordnung für integrierte Typen, die in der JDBC-Spezifikation angegeben sind.

Wie Sie bemerkt haben, ist der Oracle-Treiber standardmäßig nicht standardkonform und verwendet oracle.sql.TIMESTAMP stattdessen (was java.sql.Timestamp nicht erweitert ). Die gute Nachricht ist, dass Sie die JDBC-Konformität erzwingen können, indem Sie oracle.jdbc.J2EE13Compliant festlegen Systemeigenschaft auf true während des VM-Starts:

java -Doracle.jdbc.J2EE13Compliant=true YourApplication

oder programmgesteuert

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

Sobald Sie dies tun, gibt getResult() Instanzen von java.sql.Timestamp zurück , wie erwartet.

Weitere Einzelheiten finden Sie im entsprechenden Abschnitt der Oracle JDBC-Treiberdokumentation, in der verschiedene Möglichkeiten zum Festlegen von oracle.jdbc.J2EE13Compliant beschrieben werden.