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.