sql >> Databasteknik >  >> RDS >> Oracle

java.lang.ClassCastException:oracle.sql.TIMESTAMP kan inte castas till java.sql.Timestamp

Javadoc för ResultSet.getObject() kräver att JDBC-typen ska mappas till en Java-typ som föreskrivs av JDBC-specifikationen (TIMESTAMP -> java.sqlTimestmp):

Denna metod returnerar värdet för den givna kolumnen som ett Javaobjekt. Typen av Java-objekt kommer att vara standard Java-objekttypen som motsvarar kolumnens SQL-typ, enligt mappningen för inbyggda typer som anges i JDBC-specifikationen.

Som du har märkt är Oracle-drivrutinen som standard inte kompatibel med standarden och använder oracle.sql.TIMESTAMP istället (som inte utökar java.sql.Timestamp ). Den goda nyheten är att du kan tvinga JDBC-efterlevnad genom att ställa in oracle.jdbc.J2EE13Compliant systemegenskapen till true under vm-start:

java -Doracle.jdbc.J2EE13Compliant=true YourApplication

eller programmatiskt

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

När du har gjort detta kommer getResult() att returnera instanser av java.sql.Timestamp , som förväntat.

För mer information se det relevanta avsnittet från Oracle JDBC Driver Documentation, som beskriver flera sätt att ställa in oracle.jdbc.J2EE13Compliant.



  1. JSON_QUERY() Exempel i SQL Server (T-SQL)

  2. Agent är blockerad

  3. SQL-tabell med listpost vs SQL-tabell med en rad för varje post

  4. VÄLJ * DÄR INTE FINNS