sql >> Database >  >> RDS >> Oracle

java.lang.ClassCastException:oracle.sql.TIMESTAMP kan niet worden gecast naar java.sql.Timestamp

De javadoc voor ResultSet.getObject() schrijft voor dat het JDBC-type moet worden toegewezen aan een Java-type zoals voorgeschreven door de JDBC-specificatie (TIMESTAMP -> java.sqlTimestmp):

Deze methode retourneert de waarde van de gegeven kolom als een Javaobject. Het type Java-object is het standaard Java-objecttype dat overeenkomt met het SQL-type van de kolom, volgens de toewijzing voor ingebouwde typen die zijn gespecificeerd in de JDBC-specificatie.

Zoals je hebt gemerkt, is het Oracle-stuurprogramma standaard niet in overeenstemming met de standaard en gebruikt oracle.sql.TIMESTAMP in plaats daarvan (wat java.sql.Timestamp niet uitbreidt) ). Het goede nieuws is dat u de naleving van JDBC kunt afdwingen door de oracle.jdbc.J2EE13Compliant in te stellen. systeemeigenschap naar true tijdens het opstarten van vm:

java -Doracle.jdbc.J2EE13Compliant=true YourApplication

of programmatisch

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

Zodra u dit doet, retourneert getResult() instanties van java.sql.Timestamp , zoals verwacht.

Zie voor meer details het relevante gedeelte van de Oracle JDBC Driver Documentation, waarin verschillende manieren worden beschreven om oracle.jdbc.J2EE13Compliant in te stellen.



  1. Manier om meerdere SELECT's te proberen totdat een resultaat beschikbaar is?

  2. Impact op de prestaties van verschillende technieken voor foutafhandeling

  3. Gebruik MySQL ruimtelijke extensies om punten binnen een cirkel te selecteren

  4. Hoe voer ik een bulk in in mySQL met node.js