美文网首页
解决方案:java.sql.SQLException: Valu

解决方案:java.sql.SQLException: Valu

作者: 北方素素 | 来源:发表于2017-12-27 14:38 被阅读0次

    今天在使用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,这个问题就解决了。

    相关文章

      网友评论

          本文标题:解决方案:java.sql.SQLException: Valu

          本文链接:https://www.haomeiwen.com/subject/ykdugxtx.html