Dokument javadoc dla ResultSet.getObject() nakazuje mapowanie typu JDBC na typ Java zgodnie ze specyfikacją JDBC (TIMESTAMP -> java.sqlTimestmp):
Ta metoda zwróci wartość danej kolumny jako obiekt Java. Typ obiektu Java będzie domyślnym typem obiektu Java odpowiadającym typowi SQL kolumny, zgodnie z mapowaniem dla typów wbudowanych określonych w specyfikacji JDBC.
Jak zauważyłeś, sterownik Oracle domyślnie nie jest zgodny ze standardem i używa oracle.sql.TIMESTAMP
zamiast tego (co nie rozszerza java.sql.Timestamp
). Dobrą wiadomością jest to, że możesz wymusić zgodność z JDBC, ustawiając oracle.jdbc.J2EE13Compliant właściwość systemowa na true
podczas uruchamiania maszyny wirtualnej:
java -Doracle.jdbc.J2EE13Compliant=true YourApplication
lub programowo
System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")
Gdy to zrobisz, getResult() zwróci instancje java.sql.Timestamp
zgodnie z oczekiwaniami.
Aby uzyskać więcej informacji, zobacz odpowiednią sekcję w dokumentacji sterownika Oracle JDBC, która opisuje kilka sposobów ustawienia zgodności z normą oracle.jdbc.J2EE13.