sql >> Base de Datos >  >> RDS >> Oracle

java.lang.ClassCastException:oracle.sql.TIMESTAMP no se puede convertir a java.sql.Timestamp

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.