得到例如“无法将值转换为00:00:00”从第12列到TIMESTAMP的异常“

时间:2010-08-24 09:15:30

标签: java mysql

以前列数据类型是Date,现在我更改为Timestamp 现在,如果我试图运行该程序,我将获得异常

java.sql.SQLException:无法将值'0000-00-0000:00:00'从第12列转换为TIMESTAMP。  在com.mysql.jdbc.ResultSetRow.getTimestampFast(ResultSetRow.java:1298)  在com.mysql.jdbc.ByteArrayRow.getTimestampFast(ByteArrayRow.java:124)  在com.mysql.jdbc.ResultSetImpl.getTimestampInternal(ResultSetImpl.java:6610)  在com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:5928)  在com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:5966)  在org.hibernate.type.TimestampType.get(TimestampType.java:30)  在org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)  在org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154)  在org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)  在org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2096)  在org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1380)  在org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1308)  在org.hibernate.loader.Loader.getRow(Loader.java:1206)  在org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)  在org.hibernate.loader.Loader.doQuery(Loader.java:701)  在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)  在org.hibernate.loader.Loader.doList(Loader.java:2220)  ......还有40多个

5 个答案:

答案 0 :(得分:9)

您只需将 zeroDateTimeBehavior = convertToNull 添加到您的连接jdbc:mysql://localhost/test?zeroDateTimeBehavior=convertToNull即可。

对我而言,它完美无缺。 请参阅此link以获取更多详细信息。

答案 1 :(得分:7)

0000-00-00 00:00:00超出TIMESTAMP值的范围(实际上,它也不适用于DATE字段)。来自MySQL manual

  

TIMESTAMP数据类型的范围为'1970-01-01 00:00:01'UTC到'2038-01-19 03:14:07'UTC。

答案 2 :(得分:1)

您可以使用UNIX_TIMESTAMP(date)函数将值显式转换为TIMESTAMP。

答案 3 :(得分:1)

我将在这里疯狂猜测你正在使用MySQL :-)它使用"零日期"作为特殊的占位符 - 不幸的是,JDBC默认情况下无法处理它们。

解决方案是指定" zeroDateTimeBehavior = convertToNull"作为MySQL连接的参数(在数据源URL中或作为附加属性),例如:

jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull

这将导致所有这些值被检索为NULL。

答案 4 :(得分:0)

确保java代码中的字段类型为java.sql.Timestamp