sql >> Databáze >  >> RDS >> Oracle

java.lang.ClassCastException:oracle.sql.TIMESTAMP nelze přenést do java.sql.Timestamp

Javadoc pro ResultSet.getObject() nařizuje, že typ JDBC by měl být mapován na typ Java, jak je předepsáno specifikací JDBC (TIMESTAMP -> java.sqlTimestmp):

Tato metoda vrátí hodnotu daného sloupce jako Javaobject. Typ objektu Java bude výchozí typ objektu Java odpovídající typu SQL ve sloupci podle předdefinovaných typů mapování specifikovaných ve specifikaci JDBC.

Jak jste si všimli, ovladač Oracle ve výchozím nastavení není kompatibilní se standardem a používá oracle.sql.TIMESTAMP místo toho (což nerozšiřuje java.sql.Timestamp ). Dobrou zprávou je, že soulad s JDBC můžete vynutit nastavením oracle.jdbc.J2EE13Compliant vlastnost systému na true během spouštění vm:

java -Doracle.jdbc.J2EE13Compliant=true YourApplication

nebo programově

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

Jakmile to uděláte, getResult() vrátí instance java.sql.Timestamp podle očekávání.

Další podrobnosti naleznete v příslušné části dokumentace Oracle JDBC Driver Documentation, která popisuje několik způsobů nastavení oracle.jdbc.J2EE13Compliant.



  1. Jak zrychlit SELECT .. LIKE dotazy v MySQL na více sloupcích?

  2. Použití pouze navigace pomocí klávesnice ve Wordu, Excelu a PowerPointu (část 1:Pás karet)

  3. Postgresql extrahuje poslední řádek pro každé ID

  4. Klíčové indikátory problémového designu