sql >> Base de Datos >  >> RDS >> Oracle

¿JDBC ajusta la fecha antes de insertarla en Oracle DB? ¿Cómo evito esto?

El problema es que Java Date los objetos no almacenan una zona horaria. El valor es siempre en UTC, y se analiza y formatea en una zona horaria determinada, generalmente la zona horaria predeterminada de la JVM.

Oracle DATE las columnas también se almacenan sin zona horaria, pero deben representar la fecha tal como la ve el usuario. En el 99,99 % de los casos, eso significa la fecha en la zona horaria predeterminada de la JVM.

Entonces, el controlador JDBC toma el Timestamp / Date El valor, que está en UTC, lo convierte a la zona horaria predeterminada y lo guarda en la base de datos.

Está utilizando PreparedStatement.setTimestamp(int parameterIndex, Timestamp x) método. Para controlar la zona horaria, utilice PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal) método. Citando el javadoc: