使用MyBatis查询数据时候遇到这个异常,stackoverflow上一条回答解决办法是通过给jdbc链接增加zeroDateTimeBehavior参数来解决。
实际的错误还应该有:
java.sql.SQLException: Value ‘0000-00-00’ can not be represented as java.sql.Date
jdbc:mysql://yourserver:3306/yourdatabase?zeroDateTimeBehavior=convertToNull
随后查阅了官方手册,给出的解释如下。
zeroDateTimeBehavior What should happen when the driver encounters
DATETIME values that are composed entirely of zeros (used by MySQL to
represent invalid dates)? Valid values are “exception”, “round” and
“convertToNull”. Default: exception Since version: 3.1.4
http://dev.mysql.com/doc/connector-j/5.1/en/connector-j-installing-upgrading-3-0-to-3-1.html
设置zeroDateTimeBehavior 属性,当遇到DATETIME值完全由0组成时,最终的有效值可以设置为,异常(exception),一个近似值(round),或将这个值转换为null(convertToNull)。
随后近一步查阅手册,三个参数的详细解释如下。
exception (the default), which throws an SQLException with an SQLState
of S1009.
convertToNull, which returns NULL instead of the date.
round, which rounds the date to the nearest closest value which is
0001-01-01.
http://dev.mysql.com/doc/connector-j/5.1/en/connector-j-installing-upgrading-3-0-to-3-1.html
默认情况为exception,设置这个属性会抛出一个SQLException异常,其SQLSate码为S1009。这个状态码在写存储过程处理异常时也可以用到。
convertToNull,返回null来替代0000-00-00这样的日期。
round,将日期转换为0001-01-01。
因此,出现0000-00-00 属于一个无效日期,用convertToNull属性即可。

本文介绍在使用MyBatis进行数据查询时遇到零日期('0000-00-00')异常的解决方案,通过调整JDBC连接字符串中的zeroDateTimeBehavior参数,避免查询时抛出SQLException。详细解释了该参数的三种设置方式:exception、convertToNull和round,以及各自的适用场景。
1750

被折叠的 条评论
为什么被折叠?



