Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

java.lang.ClassCastException:oracle.sql.TIMESTAMP não pode ser convertido em java.sql.Timestamp


O javadoc para ResultSet.getObject() exige que o tipo JDBC seja mapeado para um tipo Java conforme prescrito pela especificação JDBC (TIMESTAMP -> java.sqlTimestmp):

Este método retornará o valor da coluna fornecida como um objeto Java. O tipo do objeto Java será o tipo de objeto Java padrão correspondente ao tipo SQL da coluna, seguindo o mapeamento para tipos internos especificados na especificação JDBC.

Como você notou, o driver Oracle é, por padrão, não compatível com o padrão e usa oracle.sql.TIMESTAMP em vez disso (que não estende java.sql.Timestamp ). A boa notícia é que você pode forçar a conformidade com JDBC definindo o oracle.jdbc.J2EE13Compliant propriedade do sistema para true durante a inicialização do vm:
java -Doracle.jdbc.J2EE13Compliant=true YourApplication

ou programaticamente
System.getProperties().setProperty("oracle.jdbc.J2EE13Compliant", "true")

Depois de fazer isso, getResult() retornará instâncias de java.sql.Timestamp , como esperado.

Para obter mais detalhes, consulte a seção relevante da Documentação do Oracle JDBC Driver, que descreve várias maneiras de configurar o oracle.jdbc.J2EE13Compliant.