18

準備されたステートメントを使用して、DB のタイムゾーン フィールドを含むタイムスタンプに、日付、時刻、およびタイムゾーンを含む文字列を挿入しようとしています。

問題は、Timestamp.valueof 関数が文字列に含まれるタイム ゾーンを考慮しないため、エラーが発生することです。受け入れられる形式は yyyy-[m]m-[d]d hh:mm:ss[.f...] で、タイムゾーンは言及されていません。

これは、エラーの原因となる正確なコードです。

pst.setTimestamp(2,Timestamp.valueOf("2012-08-24 14:00:00 +02:00"))

克服できる方法はありますか??前もって感謝します!

4

2 に答える 2

8

基本的な問題は、java.sql.Timestamp にタイムゾーン情報が含まれていないことです。常に「ローカルタイムゾーン」であると想定されていると思います。

私が考えることができる解決策は、PreparedStatement でパラメーターを使用するのではなく、SQL でタイムゾーン リテラルを使用することです。

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

別の考えられる解決策は、適切にフォーマットされた文字列を to_timestamp() を使用する PrepareStatement に渡すことです。

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");
于 2012-12-03T18:50:52.267 に答える
1

データベースで、タイム ゾーンを含むもう 1 つのフィールドを使用できると思います。これら2つのフィールドを取得した後、時間を手動で計算します

于 2012-12-03T17:55:08.150 に答える