Le javadoc pour ResultSet.getObject() exige que le type JDBC soit mappé à un type Java comme prescrit par la spécification JDBC (TIMESTAMP -> java.sqlTimestmp) :
Cette méthode renverra la valeur de la colonne donnée en tant qu'objet Java. Le type de l'objet Java sera le type d'objet Java par défaut correspondant au type SQL de la colonne, suivant le mappage des types intégrés spécifiés dans la spécification JDBC.
Comme vous l'avez remarqué, le pilote Oracle est par défaut non conforme à la norme et utilise oracle.sql.TIMESTAMP
à la place (qui n'étend pas java.sql.Timestamp
). La bonne nouvelle est que vous pouvez forcer la conformité JDBC en définissant oracle.jdbc.J2EE13Compliant propriété système sur true
lors du démarrage de la vm :
java -Doracle.jdbc.J2EE13Compliant=true YourApplication
ou par programmation
System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")
Une fois que vous faites cela, getResult() renverra des instances de java.sql.Timestamp
, comme prévu.
Pour plus de détails, consultez la section pertinente de la documentation du pilote Oracle JDBC, qui décrit plusieurs façons de définir oracle.jdbc.J2EE13Compliant.