问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 7 to TIMESTAMP.

发布网友 发布时间:2022-09-26 05:17

我来回答

1个回答

热心网友 时间:2023-09-27 05:11

在Mysql数据库中使用DATETIME类型来存储时间,使用JDBC中读取这个字段的时候,应该使用 ResultSet.getTimestamp(),这样会得到一个java.sql.Timestamp类型的数据。在这里既不能使用 ResultSet.getDate(),也不能使用ResultSet.getTime(),因为前者不包括time数据,后者不包括date数据。

但是在使用ResultSet.getTimestamp()时也不是完全安全的,例如,当数据库中的TIMESTAMP类型的字段值为 '0000-00-00 00:00:00'时,使用此方法进行读取,会抛出异常:Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP,这是因为JDBC不能将'0000-00-00 00:00:00'转化为一个为一个java.sql.Timestamp,在Java中,想创建一个java.util.Date,使其值为 '0000-00-00'也是不可能的,最古老的日期应该是'0001-01-01 00:00:00'。

那么在程序中该怎么办捏? 解决方案在这里:

Datetimes with all-zero components (0000-00-00 ...) — These values can not be represented reliably in Java. Connector/J 3.0.x always converted them to NULL when being read from a ResultSet.

Connector/J 3.1 throws an exception by default when these values are encountered as this is the most correct behavior according to the JDBC and SQL standards. This behavior can be modified using the zeroDateTimeBehavior configuration property. The allowable values are:

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.
Starting with Connector/J 3.1.7, ResultSet.getString() can be decoupled from this behavior via noDatetimeStringSync=true (the default value is false) so that you can retrieve the unaltered all-zero value as a String. It should be noted that this also precludes using any time zone conversions, therefore the driver will not allow you to enable noDatetimeStringSync and useTimezone at the same time.

所以,在JDBC URL中加入zeroDateTimeBehavior信息,既可以解决:
String url = "jdbc:mysql://10.149.51.80:3306/test?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull";

参考资料:http://hi.baidu.com/%CE%E2_%F0%A9/blog/item/7d8c0deb9a04dfdad439c96b.html

热心网友 时间:2023-09-27 05:11

在Mysql数据库中使用DATETIME类型来存储时间,使用JDBC中读取这个字段的时候,应该使用 ResultSet.getTimestamp(),这样会得到一个java.sql.Timestamp类型的数据。在这里既不能使用 ResultSet.getDate(),也不能使用ResultSet.getTime(),因为前者不包括time数据,后者不包括date数据。

但是在使用ResultSet.getTimestamp()时也不是完全安全的,例如,当数据库中的TIMESTAMP类型的字段值为 '0000-00-00 00:00:00'时,使用此方法进行读取,会抛出异常:Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP,这是因为JDBC不能将'0000-00-00 00:00:00'转化为一个为一个java.sql.Timestamp,在Java中,想创建一个java.util.Date,使其值为 '0000-00-00'也是不可能的,最古老的日期应该是'0001-01-01 00:00:00'。

那么在程序中该怎么办捏? 解决方案在这里:

Datetimes with all-zero components (0000-00-00 ...) — These values can not be represented reliably in Java. Connector/J 3.0.x always converted them to NULL when being read from a ResultSet.

Connector/J 3.1 throws an exception by default when these values are encountered as this is the most correct behavior according to the JDBC and SQL standards. This behavior can be modified using the zeroDateTimeBehavior configuration property. The allowable values are:

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.
Starting with Connector/J 3.1.7, ResultSet.getString() can be decoupled from this behavior via noDatetimeStringSync=true (the default value is false) so that you can retrieve the unaltered all-zero value as a String. It should be noted that this also precludes using any time zone conversions, therefore the driver will not allow you to enable noDatetimeStringSync and useTimezone at the same time.

所以,在JDBC URL中加入zeroDateTimeBehavior信息,既可以解决:
String url = "jdbc:mysql://10.149.51.80:3306/test?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull";

参考资料:http://hi.baidu.com/%CE%E2_%F0%A9/blog/item/7d8c0deb9a04dfdad439c96b.html

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么我的《英雄传说:空之轨迹SC》中“艾尔贝周游道的通缉魔兽”不见... 空之轨迹sc 托兰特平原的通缉魔兽二号 我是2兆的宽带 原先的下载速度达到260KB/S 重装下系统最高还不到70K... 为什么两兆的线下载速度只有80KB/S 我们家宽带是网通的办理了2兆的可是下载速度70~90KB 原因 一九八三年大年三十是什么星座 请教1984年2月1日出生而且阴历生日正好是大年三十,请问我岁是多大 万岱鸿腾国际商贸有限公司送表真的吗 云南岱鸿商贸有限公司怎么样? 重庆鸿岱科技有限公司怎么样? java.sql.SQLException: Column 'usename' cannot be null 这是哪里出错了啊 Attribute "type" is required and must be specified for element type "data-source".错误 Element type "bean" must be followed by either attribute specifications, Eclipse jsp报错500 jdbc4.MySQLIntegrityConstraintViolationException: Column 'id' cannot be null 手机绑定他的手机号可以查到他们的定位吗? 主送机关是指 我被他给甩了,我和他是同事,现在他每天都在同事面前提到他女朋友,我听到就很生气。 我被他锁在门外了 英语翻译 我被他抛弃了,我很伤心很想念他,怎么办 “我被他打了”英文翻译 我被他迷惑是什么意思? 我被他感动了 用英语怎么说 请帮我儿子取个名字,鄙姓王 文轩图书高效作业八年级答案 网页打不开loading 关于危机公关的相关理论和相关案例,必须有案例,然后对案例进行分析。 写毛笔字时的“提笔,按笔,收笔”是 形容台风异常猛烈的经典句子 关于台风的句子唯美短句 苹果6摔了指纹解锁坏了修不好,现在下载东西也下载不了,进触控ID系统也进不去,取消不了,怎么办? Hibernate 错误 column attribute may not be used together with <column> subelement Element type "Button" must be followed by either attribute specifications, ">" or "/>". 女神异闻录5白金攻略P5全奖杯怎么拿 电脑有网络但是却上不了网,wifi也不见了 家中养转运竹有什么讲究 家中养转运竹有何讲究 转运竹真的很灵吗?如果要是运气还不错,会有什么发生阿? 北大新任校长的10句话,全场掌声如雷 摘自北大校长的10句话让你全场掌声如雷 北大新任校长王恩戈,上任后说的十句话,不仅对学生,对所有人都有用 后厨为什么没有结尾呢? 知道者能告诉我吗? 后厨一共多少集?32集的话结局怎么就那样结束了吗 75mm岩棉复合板多少钱一平?岩棉复合板宽度规格有哪些? 岩棉复合板用于钢架屋面型号为0.6 0.5 75厚的板多少钱一个平方 民国纸币及袁大头的问题~ 怎么请产假 抖音为什么突然间就打不开了呢? 马东瑶的介绍 马东瑶的著作信息 南通职业大学古典诗词鉴赏好修吗 关于知心朋友诗句