Javadoc för ResultSet.getObject() kräver att JDBC-typen ska mappas till en Java-typ som föreskrivs av JDBC-specifikationen (TIMESTAMP -> java.sqlTimestmp):
Denna metod returnerar värdet för den givna kolumnen som ett Javaobjekt. Typen av Java-objekt kommer att vara standard Java-objekttypen som motsvarar kolumnens SQL-typ, enligt mappningen för inbyggda typer som anges i JDBC-specifikationen.
Som du har märkt är Oracle-drivrutinen som standard inte kompatibel med standarden och använder oracle.sql.TIMESTAMP
istället (som inte utökar java.sql.Timestamp
). Den goda nyheten är att du kan tvinga JDBC-efterlevnad genom att ställa in oracle.jdbc.J2EE13Compliant systemegenskapen till true
under vm-start:
java -Doracle.jdbc.J2EE13Compliant=true YourApplication
eller programmatiskt
System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")
När du har gjort detta kommer getResult() att returnera instanser av java.sql.Timestamp
, som förväntat.
För mer information se det relevanta avsnittet från Oracle JDBC Driver Documentation, som beskriver flera sätt att ställa in oracle.jdbc.J2EE13Compliant.