Cause: java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timesta

本文详细解析了在MySQL中遇到的java.sql.SQLException错误,当日期或时间字段被设置为0000-00-0000:00:00时,Java无法将其转换为Timestamp类型。提供了解决方案,包括使用case when语句、调整连接字符串参数和手动修改数据库记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Cause: java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp

今天在数据库中添加了一个日期型的字段,然后运行项目时抛出了一个异常Cause: java.sql.SQLException: Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp

错误信息

Cause: java.sql.SQLException: Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp
; SQL []; Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp; nested exception is java.sql.SQLException: Value ‘0000-00-00 00:00:00’ can not be represented as java.sql.Timestamp
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:108)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:74)
at org.mybatis.spring.SqlSessionTemplate S q l S e s s i o n I n t e r c e p t o r . i n v o k e ( S q l S e s s i o n T e m p l a t e . j a v a : 399 ) a t c o m . s u n . p r o x y . SqlSessionInterceptor.invoke(SqlSessionTemplate.java:399) at com.sun.proxy. SqlSessionInterceptor.invoke(SqlSessionTemplate.java:399)atcom.sun.proxy.Proxy28.selectList(Unknown Source)

解决方案

当MySQL中date或datetime类型的列有全0值时会出现此错误,例如0000-00-00 00:00:00,在我添加了这个日期类型的字段后,MySQL默认赋值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"

MySQL认为‘0000-00-00 00:00:00’是一个有效的日期,但是Java.sql.Date并不这么认为,它不能正确地表示出这个日期

1、使用case when语句,将查找出的0日期转换为null,比如这样:
SELECT
CASE WHEN date!=‘0000-00-00’ THEN date END new_date
FROM
yourtable
2、在连接字符串中加上zeroDateTimeBehavior=convertToNull实现自动转换
3、去数据库手动更改值为‘0000-00-00 00:00:00’的记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值