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

Comment puis-je insérer un horodatage avec un fuseau horaire dans postgresql avec une instruction préparée?

Le problème de base est qu'un java.sql.Timestamp ne contient pas d'informations de fuseau horaire. Je pense qu'il est toujours supposé être "fuseau horaire local".

La solution à laquelle je peux penser est de ne pas utiliser de paramètre dans un PreparedStatement, mais un littéral de fuseau horaire en SQL :

update foo
  set ts_col = timestamp with time zone '2012-08-24 14:00:00 +02:00'`;

Une autre solution possible pourrait être de passer une chaîne correctement formatée à un PrepareStatement qui utilise to_timestamp() :

String sql = "update foo set ts_col = to_timestamp(?, 'yyyy-mm-dd hh24:mi:ss')"; 
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, "2012-08-24 14:00:00 +02:00");