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.