Oracle
 sql >> база данни >  >> RDS >> Oracle

java.lang.ClassCastException:oracle.sql.TIMESTAMP не може да бъде прехвърлен към java.sql.Timestamp

Javadoc за ResultSet.getObject() изисква типът JDBC да бъде съпоставен с тип Java, както е предписано от спецификацията на JDBC (TIMESTAMP -> java.sqlTimestmp):

Този метод ще върне стойността на дадена колона като Javaобект. Типът на Java обекта ще бъде Java objecttype по подразбиране, съответстващ на SQL типа на колоната, следвайки съпоставянето на вградените типове, посочени в спецификацията на JDBC.

Както забелязахте, драйверът на Oracle по подразбиране не е съвместим със стандарта и използва oracle.sql.TIMESTAMP вместо това (което не разширява java.sql.Timestamp ). Добрата новина е, че можете да принудите JDBC съответствие, като зададете oracle.jdbc.J2EE13Compliant системното свойство на true по време на стартиране на vm:

java -Doracle.jdbc.J2EE13Compliant=true YourApplication

или програмно

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

След като направите това, getResult() ще върне екземпляри на java.sql.Timestamp , както се очаква.

За повече подробности вижте съответния раздел от Oracle JDBC Driver Documentation, който описва няколко начина за настройка на oracle.jdbc.J2EE13Compliant.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мога ли да съхранявам двоичен низ в колона CLOB

  2. Създаване на CTE в Oracle

  3. Пример за състояние на Oracle IF

  4. Доставчикът не е съвместим с версията на клиента Oracle

  5. Как да привлечем служителите към техните мениджъри