2012-09-26 57 views
0

,我目前所面對的是我能不能檢索從我的MySQL數據庫中的日期對象的問題,到目前爲止,不管我怎麼努力,我要麼得到無法檢索從MySQL日期爲JDBC

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 

java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date 

有沒有人有一個想法,可以做些什麼來解決這個問題。

我已經嘗試thisthis但我還是來了兩個相同的錯誤,這些錯誤都是由日期引起

回答

1

'0000-00-00'是無效日期。它不應該存在於您的數據中。

因此,你需要:

  1. 清理數據並關閉ALLOW_INVALID_DATES在你的MySQL配置(見http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_allow_invalid_dates

  2. 編寫Java代碼捕捉日期的異常和處理壞數據

  3. 按照John Woo的建議,編寫SQL以將默認日期替換爲無效日期。

3的問題在於還有其他無效日期(例如'2012-02-31')可能會引發異常。祝你好運。

+0

數據不應該是無效的,儘管我使用的測試數據是強迫它使用默認日期 – adam2510

0

如果你是從數據庫中檢索行,你select語句格式中的日期,

SELECT if(colDate = '0000-00-00', curdate(), colDate), .... 

只是將CURDATE()替換爲您想要的默認日期。出現異常的原因是因爲0000-00-00不是有效日期。

1

除了什麼其他回答(包括非常好的建議,存儲無效的日期是不是一個好主意),你還可以指示JDBC驅動程序以不同的方式處理那些無效的日期:

來源: http://dev.mysql.com/doc/refman/5.5/en/connector-j-installing-upgrading.html

當遇到這些值時,Connector/J 3.1默認會引發異常,因爲根據JDBC和SQL標準,這是最正確的行爲。可以使用zeroDateTimeBehavior配置屬性修改此行爲。允許的值爲:

-     異常(默認值),它引發SQLException與S1009的SQLState。
-     convertToNull,它返回NULL而不是日期。
-     round,其將日期舍入爲最接近的最接近0001-01-01的值。

我會建議使用convertToNull

關於如何指定配置屬性說明,請參見here