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

JDBC regola la data prima di inserirla in Oracle DB? Come posso prevenire questo?

Il problema è che Java Date gli oggetti non memorizzano un fuso orario. Il valore è sempre in UTC e viene analizzato e formattato in un determinato fuso orario, in genere il fuso orario predefinito della JVM.

Oracle DATE le colonne vengono memorizzate anche senza fuso orario, ma devono rappresentare la data vista dall'utente. Nel 99,99% dei casi, ciò significa la data nel fuso orario predefinito della JVM.

Quindi, il driver JDBC prende il Timestamp / Date value, che è in UTC, lo converte nel fuso orario predefinito e lo salva nel database.

Stai utilizzando PreparedStatement.setTimestamp(int parameterIndex, Timestamp x) metodo. Per controllare il fuso orario, utilizzare PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal) metodo. Citando il javadoc: