PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich einen Zeitstempel mit Zeitzone in Postgresql mit vorbereiteter Anweisung einfügen?

Das grundlegende Problem besteht darin, dass ein java.sql.Timestamp keine Zeitzoneninformationen enthält. Ich denke, es wird immer angenommen, dass es sich um "lokale Zeitzone" handelt.

Eine Lösung, die ich mir vorstellen kann, besteht darin, keinen Parameter in einem PreparedStatement zu verwenden, sondern ein Zeitzonenliteral in SQL:

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

Eine andere mögliche Lösung könnte darin bestehen, einen korrekt formatierten String an ein PrepareStatement zu übergeben, das to_timestamp():

verwendet
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");