Javadoc untuk ResultSet.getObject() mengamanatkan bahwa tipe JDBC harus dipetakan ke tipe Java seperti yang ditentukan oleh spesifikasi JDBC (TIMESTAMP -> java.sqlTimestmp):
Metode ini akan mengembalikan nilai kolom yang diberikan sebagai objek Java. Tipe objek Java akan menjadi tipe objek Java default yang sesuai dengan tipe SQL kolom, mengikuti pemetaan untuk tipe bawaan yang ditentukan dalam spesifikasi JDBC.
Seperti yang Anda perhatikan, driver Oracle secara default tidak sesuai dengan standar dan menggunakan oracle.sql.TIMESTAMP
sebagai gantinya (yang tidak memperpanjang java.sql.Timestamp
). Kabar baiknya adalah Anda dapat memaksa kepatuhan JDBC dengan menyetel Oracle.jdbc.J2EE13Compliant properti sistem menjadi true
saat memulai vm:
java -Doracle.jdbc.J2EE13Compliant=true YourApplication
atau secara terprogram
System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")
Setelah Anda melakukannya, getResult() akan mengembalikan instance java.sql.Timestamp
, seperti yang diharapkan.
Untuk lebih jelasnya lihat bagian yang relevan dari Oracle JDBC Driver Documentation, yang menjelaskan beberapa cara pengaturan oracle.jdbc.J2EE13Compliant.