2010-11-28 24 views
1

2010-11-28のような文字列を日付型に変換してPostgreSQLデータベースに保存する必要があります。私はこのコードを試しましたが、データベースの結果をチェックすると、両方の日付がNULLです:Java:文字列を日付に変換

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
Date validStartDate=null; 
Date validEndDate=null; 

    try { 
     validStartDate = df.parse(startDate); 
     validEndDate = df.parse(endDate); 

    } catch (Exception e) { 

     ... 

    } 

    Assigment a = new Assignment(..., validStartDate, validEndDate); 
    session.save(s); 

------------------------- -------編集----------------------------

startDateとendDateは、yyyy- mm-ddのような2010-11-27。スタックトレースには何もありません(変換はどうにか動作するようです)。もし何かがあったら、私はおそらく何が間違っているか知っているでしょう。変換後、日付はpostgresデータベースに保存されます。はい、sql.Dateの代わりにutil.Dateを使用しました(おそらく最初の間違いです)。

------------------------------- Edit2 -------------- -------------

コードは簡略化されていますが、スタックトレースに何も表示されず、validStartDateとvalidEndDateが次のように変換されます。Tue Nov 30 00:00:00 CET(ヌルではない)。代入は実際にはデータベースに正しく保存されています。 sql:public.assignment(type、valid_start_date、valid_end_date、id)の値(5、NULL、NULL、2)に挿入します。私はsql.Dateを使用しようとしましたが、成功しませんでした。

----------------------------割り当てマッピング---------------- -

<hibernate-mapping> 
    <class name="model.Assignment" schema="public" table="assignment"> 
    <id name="id" type="int"> 
     <column name="id"/> 
     <generator class="increment"/> 
    </id> 


    <property name="validStartDate" type="date"> 
      <column name="valid_start_date" length="13" /> 
     </property> 
     <property name="validEndDate" type="date"> 
      <column name="valid_end_date" length="13" /> 
     </property> 
     <property name="type" type="integer"> 
      <column name="type" /> 
     </property> 

    </class> 
</hibernate-mapping> 

私はユーザーデータを保存するためにHibernateを使用しています。 Stringは、JQueryウィジェットDatepickerによって作成されます。誰もがその問題を解決する方法を知っていますか?事前におかげで助けてください。

+0

'startDate'と' endDate'は正しく設定されていますか? – Bozho

+2

したがって、あなたは例外を処理していませんが、無視してコードフローを続行していますか?あなたは例外をスローする必要があります!問題に関する貴重な情報が含まれています。 – BalusC

+0

あなたのコードは不完全です... 'startDate、endDate'とは何ですか、' a'は 'session''となります。 'catch'は空ですか? – khachik

答えて

1

質問をいくつかのコメント:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
Date validStartDate=null; 
Date validEndDate=null; 

try { 
    validStartDate = df.parse(startDate); 
    validEndDate = df.parse(endDate); 

} catch (Exception e) { 
    // are there any exceptions thrown and caught here? 
} 

// are validStartDate and validEndDate non-null at this point? 
// is this code even executed? it won't be if an exception was thrown... 
Assigment a = new Assignment(..., validStartDate, validEndDate); 

// where did this "s" come from? did you mean "session.save(a)"? 
session.save(s); 

別にこれらの質問から、あなたは次のことを確認する必要があります:

Hibernateは本当にデータベースであなたのAssignmentを保存していますか?

Hibernateのマッピングは正しいですか?

java.sql.dateを試しましたか?

生成されるSQLは何ですか? hibernate.cfg.xmlファイルで<property name="show_sql">true</property>を使用してこのオプションを有効にすることができます。

上記をすべて確認するだけで問題を解決できます。

+0

こんにちは、ここに答えがあります。コードは簡略化されていますが、スタックトレースには何も表示されず、validStartDateとvalidEndDateはTue Nov 30 00:00:00 CET(nullではない)のようなものに変換されます。代入は実際にはデータベースに正しく保存されています。 sql:public.assignment(type、valid_start_date、valid_end_date、id)値(5、NULL、NULL、2)への挿入 – sass

+0

@sass:Hibernateのマッピングはどうですか?挿入時に両方の日付をnullにする必要がありますか? – darioo

+0

次のマッピングがあります。 sass

0

Dateオブジェクトはjava.util.Dateオブジェクトかjava.sql.Dateですか?私が尋ねる理由は、SimpleDateFormatの解析ではStringをjava.util.Dateに変換しますが、SQLデータベースでこのオブジェクトを使用している場合は、後者のjava.sql.Dateが必要になると思われます。幸い、彼らはかなり簡単に変換することができます。また、変換しようとするとキャッチブロックに何が表示されますか?キャッチされている例外はありますか?

関連する問題