今天在使用MyBatis查找MySQL数据库的时候,出现了一个以前没有遇到过的错误,现在写出来,没准有谁看到这篇文章,就能解决问题。
代码抛出的异常信息就是题目中的:
java.sql.SQLException: Value ''0000-00-00'' can not be represented as java.sql.Date......
主要是这一句。
经过我软bing国际版的不懈努力(打波广告,哈哈),找到了问题出现的原因与解决方案。
原因(是我翻译过来的):
当MySQL中date或datetime类型的列有全0值时会出现此错误,例如0000-00-00 00:00:00,
MySQL Connector/J 3.0.x (3.0各版本)会把为0的date或者datetime类型转换为null值,但是在MySQL Connector/J 3.1 及以后的版本中就不是这样了,.默认会抛出这么一条异常"java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date"还有一个状态码“sqlstate s1009”。(这段后面还有句话,和abobe有关,我就不翻译了,原文链接:https://helpx.adobe.com/coldfusion/kb/mysql-error-java-sql-sqlexception.html)
还有来自StackOverflow热心同学的解释(原文链接: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日期转换为null,比如这样:
SELECT
CASE WHEN `date`!='0000-00-00' THEN `date` END new_date
FROM
yourtable
2、在连接字符串中加上zeroDateTimeBehavior=convertToNull实现自动转换
3、也可以去数据库把0日期手动改成null(这条是我想的,哈哈)
嗯~ o(* ̄▽ ̄*)o,这个问题就解决了。