Oracle
 sql >> Base de données >  >> RDS >> Oracle

JDBC ajuste-t-il la date avant de l'insérer dans la base de données Oracle ? Comment puis-je empêcher cela ?

Le problème est que Java Date les objets ne stockent pas de fuseau horaire. La valeur est toujours en UTC, et est analysé et formaté dans un fuseau horaire donné, généralement le fuseau horaire par défaut de la JVM.

Oracle DATE les colonnes sont également stockées sans fuseau horaire, mais doivent représenter la date telle que vue par l'utilisateur. Dans 99,99 % des cas, cela signifie la date dans le fuseau horaire par défaut de la JVM.

Ainsi, le pilote JDBC prend le Timestamp / Date valeur, qui est en UTC, la convertit dans le fuseau horaire par défaut et l'enregistre dans la base de données.

Vous utilisez PreparedStatement.setTimestamp(int parameterIndex, Timestamp x) méthode. Pour contrôler le fuseau horaire, utilisez PreparedStatement.setTimestamp(int parameterIndex, Timestamp x, Calendar cal) méthode. Citant le javadoc :