2010-11-28 223 views
1

我需要將像2010-11-28這樣的字符串轉換爲Date類型以保存在PostgreSQL數據庫中。我試過這段代碼,但是當我檢查數據庫中的結果時,兩個日期都爲空: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數據庫中。是的,我用util.Date而不是sql.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來保存用戶數據。該字符串由JQuery小部件Datepicker創建。有誰知道如何解決這個問題?預先感謝您的幫助。

+0

你確定`startDate`和`endDate`正確填充? – Bozho 2010-11-28 18:05:25

+2

因此,您沒有處理異常,但忽略它並繼續執行代碼流?你應該拋出異常!它包含有關該問題的寶貴信息。 – BalusC 2010-11-28 18:07:31

回答

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); 
從這些問題

除此之外,您應檢查以下內容:

是進入休眠模式確實節省了數據庫中的Assignment

您的Hibernate映射是否正確?

您是否嘗試過使用java.sql.date

什麼是生成的SQL?您可以在hibernate.cfg.xml文件中使用<property name="show_sql">true</property>來啓用該選項。

只有通過檢查以上所有內容,您才能解決您的問題。

0

Date對象是java.util.Date對象還是java.sql.Date?我問的原因是SimpleDateFormat解析會將字符串轉換爲java.util.Date,但如果您將此對象與SQL數據庫一起使用,我懷疑您需要後者java.sql.Date。幸運的是,它們可以很容易地轉換。另外,當你嘗試轉換時,你的catch塊會說什麼?是否有任何異常被捕獲?