以前列数据类型是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多个
答案 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