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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Mysql在进行查询时报了一个 Value '0000-00-00 00:00:00' can not be re...
    hello_mr_future阅读 3,565评论 0 0
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,656评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • 你拥有整片森林,你喜欢谁就可以摘下谁的果子,我不行,如果我爱一个人,我的果子就会是又苦又涩。 ​​​
    无理的啊晶阅读 265评论 0 0
  • 从珠峰国家公园大门开始一直到珠峰大本营约有100公里的山路,3个小时的车程,全程都是在平均4700米的海拔,最高的...
    Tong_yh阅读 900评论 0 10