Javadoc'en for ResultSet.getObject() beordrer, at JDBC-typen skal tilknyttes en Java-type som foreskrevet af JDBC-specifikationen (TIMESTAMP -> java.sqlTimestmp):
Denne metode returnerer værdien af den givne kolonne som et Java-objekt. Typen af Java-objektet vil være standard Java-objekttypen, der svarer til kolonnens SQL-type, efter tilknytningen for indbyggede typer specificeret i JDBC-specifikationen.
Som du har bemærket, er Oracle-driveren som standard ikke kompatibel med standarden og bruger oracle.sql.TIMESTAMP
i stedet (som ikke udvider java.sql.Timestamp
). Den gode nyhed er, at du kan tvinge JDBC-overholdelse ved at indstille oracle.jdbc.J2EE13Compliant systemegenskab til true
under opstart af vm:
java -Doracle.jdbc.J2EE13Compliant=true YourApplication
eller programmatisk
System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")
Når du har gjort dette, vil getResult() returnere forekomster af java.sql.Timestamp
, som forventet.
For flere detaljer se det relevante afsnit fra Oracle JDBC Driver Documentation, som beskriver flere måder at indstille oracle.jdbc.J2EE13Compliant på.