今天在使用MyBatis查找MySQL數(shù)據(jù)庫的時候,出現(xiàn)了一個以前沒有遇到過的錯誤,現(xiàn)在寫出來,沒準有誰看到這篇文章,就能解決問題。
代碼拋出的異常信息就是題目中的:
java.sql.SQLException: Value ''0000-00-00'' can not be represented as java.sql.Date......
主要是這一句。
經(jīng)過我軟bing國際版的不懈努力(打波廣告,哈哈),找到了問題出現(xiàn)的原因與解決方案。
原因(是我翻譯過來的):
當(dāng)MySQL中date或datetime類型的列有全0值時會出現(xiàn)此錯誤,例如0000-00-00 00:00:00,
?MySQL Connector/J 3.0.x (3.0各版本)會把為0的date或者datetime類型轉(zhuǎn)換為null值,但是在MySQL Connector/J 3.1 及以后的版本中就不是這樣了,.默認會拋出這么一條異常"java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date"還有一個狀態(tài)碼“sqlstate s1009”。(這段后面還有句話,和abobe有關(guān),我就不翻譯了,原文鏈接:https://helpx.adobe.com/coldfusion/kb/mysql-error-java-sql-sqlexception.html)
還有來自StackOverflow熱心同學(xué)的解釋(原文鏈接:https://stackoverflow.com/questions/17195343/value-0000-00-00-can-not-be-represented-as-java-sql-date):
MySQL認為‘0000-00-00’是一個有效的日期,但是Java.sql.Date并不這么認為,它不能正確地表示出這個日期。
好了,接下來是解決辦法,主要也是StackOverflow提供的:
1、使用case when語句,將查找出的0日期轉(zhuǎn)換為null,比如這樣:
SELECT
? CASE WHEN `date`!='0000-00-00' THEN `date` END new_date
FROM
? yourtable
2、在連接字符串中加上zeroDateTimeBehavior=convertToNull實現(xiàn)自動轉(zhuǎn)換
3、也可以去數(shù)據(jù)庫把0日期手動改成null(這條是我想的,哈哈)
嗯~ o(* ̄▽ ̄*)o,這個問題就解決了。