PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso inserire timestamp con timezone in postgresql con una dichiarazione preparata?

Il problema di base è che java.sql.Timestamp non contiene informazioni sul fuso orario. Penso che si presume sempre che sia "fuso orario locale".

La soluzione che mi viene in mente è di non utilizzare un parametro in una PreparedStatement, ma un fuso orario letterale in SQL:

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

Un'altra possibile soluzione potrebbe essere quella di passare una stringa formattata correttamente a una PrepareStatement che utilizza 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");