De javadoc voor ResultSet.getObject() schrijft voor dat het JDBC-type moet worden toegewezen aan een Java-type zoals voorgeschreven door de JDBC-specificatie (TIMESTAMP -> java.sqlTimestmp):
Deze methode retourneert de waarde van de gegeven kolom als een Javaobject. Het type Java-object is het standaard Java-objecttype dat overeenkomt met het SQL-type van de kolom, volgens de toewijzing voor ingebouwde typen die zijn gespecificeerd in de JDBC-specificatie.
Zoals je hebt gemerkt, is het Oracle-stuurprogramma standaard niet in overeenstemming met de standaard en gebruikt oracle.sql.TIMESTAMP
in plaats daarvan (wat java.sql.Timestamp
niet uitbreidt) ). Het goede nieuws is dat u de naleving van JDBC kunt afdwingen door de oracle.jdbc.J2EE13Compliant in te stellen. systeemeigenschap naar true
tijdens het opstarten van vm:
java -Doracle.jdbc.J2EE13Compliant=true YourApplication
of programmatisch
System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")
Zodra u dit doet, retourneert getResult() instanties van java.sql.Timestamp
, zoals verwacht.
Zie voor meer details het relevante gedeelte van de Oracle JDBC Driver Documentation, waarin verschillende manieren worden beschreven om oracle.jdbc.J2EE13Compliant in te stellen.