1、问题概述?
今天在执行查询功能的时候,控制台报错信息如下:
java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
查询了一下数据库的数据,数据库存在如下数据,如下:
2、问题分析?
1、MySQL规定:datetime的时间范围在1000-01-01 00:00:00 到 9999-12-31 23:59:59,反之程序旧货报错,0000-00-00 00:00:00自然不在范围就会报错。
2、0000-00-00 00:00:00查询出来后,再将其转换为Java的Timestamp类型的时候出错了。
3、解决方案?
3.1、解决方案1
如果数据添加功能是你自己写的,你就修改添加程序,当没有时间的时候,默认值为null,而不是0000-00-00 00:00:00。
createtime datetime NOT NULL DEFAULT NULL
或者
createtime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ;
3.2、解决方案2
如果数据不是你造的,你只是使用者,你就修改连接数据库的配置信息。
加入zeroDateTimeBehavior=convertToNull配置
【zeroDateTimeBehavior其他属性】:
exception:默认值,抛出异常;
convertToNull:将零日期转换成NULL;
round:将零日期时间值四舍五入为最接近的非零日期时间,即0001-01-01 00:00:00;
null:将零日期时间值保留为零日期时间值
【完整配置】
jdbc:mysql://localhost:3306/test?&zeroDateTimeBehavior=convertToNull
spring:
#数据库连接配置,未使用连接池
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&zeroDateTimeBehavior=convertToNull
username: root
password: 12345678