MyBatis:SQLException(Zero date value prohibited)解决方案

使用MyBatis查询数据的时候,可能会遇到下面两个异常:

  • java.sql.SQLException: Zero date value prohibited
  • java.sql.SQLException: Value ‘0000-00-00’ can not be represented as
    java.sql.Date

随后查阅了官方手册,给出的解释如下。

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

解决方案:设置zeroDateTimeBehavior 属性,当遇到DATETIME值完全由0组成时,最终的有效值可以设置为:异常(exception),一个近似值(round),或将这个值转换为null(convertToNull)。

jdbc:mysql://yourserver:3306/yourdatabase?zeroDateTimeBehavior=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.

默认情况为exception,设置这个属性会抛出一个SQLException异常,其SQLSate码为S1009。这个状态码在写存储过程处理异常时也可以用到。

convertToNull,返回null来替代0000-00-00这样的日期。

round,将日期转换为0001-01-01。

因此,出现0000-00-00 属于一个无效日期,用convertToNull属性即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小二(海阔天空)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值