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

java.lang.ClassCastException:oracle.sql.TIMESTAMP kan ikke castes til java.sql.Timestamp

Javadoc'en for ResultSet.getObject() beordrer, at JDBC-typen skal tilknyttes en Java-type som foreskrevet af JDBC-specifikationen (TIMESTAMP -> java.sqlTimestmp):

Denne metode returnerer værdien af ​​den givne kolonne som et Java-objekt. Typen af ​​Java-objektet vil være standard Java-objekttypen, der svarer til kolonnens SQL-type, efter tilknytningen for indbyggede typer specificeret i JDBC-specifikationen.

Som du har bemærket, er Oracle-driveren som standard ikke kompatibel med standarden og bruger oracle.sql.TIMESTAMP i stedet (som ikke udvider java.sql.Timestamp ). Den gode nyhed er, at du kan tvinge JDBC-overholdelse ved at indstille oracle.jdbc.J2EE13Compliant systemegenskab til true under opstart af vm:

java -Doracle.jdbc.J2EE13Compliant=true YourApplication

eller programmatisk

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

Når du har gjort dette, vil getResult() returnere forekomster af java.sql.Timestamp , som forventet.

For flere detaljer se det relevante afsnit fra Oracle JDBC Driver Documentation, som beskriver flere måder at indstille oracle.jdbc.J2EE13Compliant på.



  1. ClassCastException:java.math.BigInteger kan ikke castes til java.lang.Long på forbindelse til MySQL

  2. Sådan opretter og bruger du MySQL-visninger

  3. Forstå Lob-segmenter (SYS_LOB) i Oracle?

  4. hvad er en god måde at horisontal shard i postgresql