El javadoc para ResultSet.getObject() exige que el tipo JDBC se asigne a un tipo Java según lo prescrito por la especificación JDBC (TIMESTAMP -> java.sqlTimestmp):
Este método devolverá el valor de la columna dada como un objeto Java. El tipo del objeto Java será el tipo de objeto Java predeterminado correspondiente al tipo SQL de la columna, siguiendo el mapeo de tipos incorporados especificado en la especificación JDBC.
Como habrá notado, el controlador de Oracle por defecto no cumple con el estándar y usa oracle.sql.TIMESTAMP
en su lugar (que no extiende java.sql.Timestamp
). La buena noticia es que puede forzar el cumplimiento de JDBC configurando oracle.jdbc.J2EE13Compliant propiedad del sistema a true
durante el inicio de la máquina virtual:
java -Doracle.jdbc.J2EE13Compliant=true YourApplication
o programáticamente
System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")
Una vez que haga esto, getResult() devolverá instancias de java.sql.Timestamp
, como se esperaba.
Para obtener más detalles, consulte la sección correspondiente de la documentación del controlador JDBC de Oracle, que describe varias formas de configurar Oracle.jdbc.J2EE13Compliant.