2011-08-10 12 views
6

でのResultSetから日時を取得する私の列の型がTIMESTAMPである、私のクラスは、このようなタイプ日時の性質があるので:JdbcTemplateになりましは、データベースにJdbcTemplate

public void setDiscoveryDate(final DateTime discoveryDtTm) { 
     this.discoveryDtTm = discoveryDtTm; 
    } 

を私はそれを取得したいので、このようないくつかのコード:

列が、私はのDateTimeを返します何かを見つけることができませんでしたResultSetの取得ので動作しません
variant.setDiscoveryDate(rs.getTimestamp("discovery_dt_tm")); 

、私は唯一のgetDateまたはgetTimeのいずれかを見ました。

答えて

13

DateTimeは、標準的なJavaの型ではないためです。あなたはJodaTimeタイプを参照している場合は、この方法を試してください。rs.getTimestamp戻りnullは、あなたがより小さな文にこれを破るとnullのためのチェックを追加することもできますので、場合

variant.setDiscoveryDate(
    new DateTime(rs.getTimestamp("discovery_dt_tm").getTime()) 
); 

これが解除されます。 Timestampクラスの悪いデザインによる

variant.setDiscoveryDate(
    new DateTime(rs.getTimestamp("discovery_dt_tm")) 
); 

しかし、それはまた間違っている、(参照:DateTimeのコンストラクタはTimestampはのサブクラスであるjava.util.Dateを要するため、これは、より簡単に行うことができること

注意説明のために)。

+0

ありがとうございます。私たちはまだ.getTime()でネクタイだけを取得し、それを新しいDateTimeに渡して、Dateに何が起こったのですか? – Bohn

+1

@BDotA: 'Timestamp.getTime()'の名前は悪いです。1970年1月1日以降のミリ秒を返します。日付と時刻の両方の部分が含まれています。 – skaffman

+0

rs.getTimestamp()はデータベースから生の値を返しますが、JVM *のタイムゾーンでは*を返します。データベースにUTC値を格納すると、新しいDateTime(rs.getTimestamp())が誤った値を返します - UTCオフセットが何であってもオフセットされます。 –

1

試してみてください。

variant.setDiscoveryDate(new DateTime(rs.getTimestamp("discovery_dt_tm").getTime())); 
+0

おかげで、なぜ "getMillis()"(getTime()付き)最初の例と

スティック? – Bohn

関連する問題