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

JDBC коригира ли датата, преди да я вмъкне в Oracle DB? Как да предотвратя това?

Проблемът е, че Java Date обектите не съхраняват часова зона. Стойността е винаги в UTC и се анализира и форматира в дадена часова зона, обикновено часовата зона по подразбиране на JVM.

Oracle DATE колоните също се съхраняват без часова зона, но трябва да представляват датата, както се вижда от потребителя. В 99,99% от случаите това означава датата в часовата зона по подразбиране на JVM.

И така, JDBC драйверът взема Timestamp / Date стойност, която е в UTC, я преобразува в часовата зона по подразбиране и я записва в базата данни.

Вие използвате PreparedStatement.setTimestamp(int parameterIndex, Timestamp x) метод. За да контролирате часовата зона, използвайте PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal) метод. Цитирайки javadoc:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка на Oracle несъвместими типове данни:очакваният CHAR получи LONG

  2. Проблем при зареждане на Oracle.DataAccess.Dll на x-64 машина

  3. java.time.LocalDate.getDayOfWeek() до java.util.Calendar.get(DAY_OF_WEEK)

  4. предаване на името на таблицата като параметър на plsql

  5. BadImageFormatException на доставчик на .net oracle