Oracle
 sql >> Database >  >> RDS >> Oracle

java.lang.ClassCastException:non è possibile eseguire il cast di oracle.sql.TIMESTAMP su java.sql.Timestamp

Il javadoc per ResultSet.getObject() richiede che il tipo JDBC debba essere mappato a un tipo Java come prescritto dalle specifiche JDBC (TIMESTAMP -> java.sqlTimestmp):

Questo metodo restituirà il valore della colonna data come Javaobject. Il tipo dell'oggetto Java sarà il tipo di oggetto Java predefinito corrispondente al tipo SQL della colonna, seguendo la mappatura per i tipi incorporati specificata nella specifica JDBC.

Come avrai notato, il driver Oracle è per impostazione predefinita non conforme allo standard e usa oracle.sql.TIMESTAMP invece (che non estende java.sql.Timestamp ). La buona notizia è che puoi forzare la conformità JDBC impostando oracle.jdbc.J2EE13Compliant proprietà di sistema su true durante l'avvio della macchina virtuale:

java -Doracle.jdbc.J2EE13Compliant=true YourApplication

o a livello di codice

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

Dopo averlo fatto, getResult() restituirà istanze di java.sql.Timestamp , come previsto.

Per maggiori dettagli, vedere la sezione pertinente della documentazione del driver Oracle JDBC, che descrive diversi modi per impostare oracle.jdbc.J2EE13Compliant.