我目前遇到的问题是我无法从我的 mysql 数据库中检索日期对象,到目前为止,无论我尝试什么,我要么得到
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
或者
java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
有没有人知道可以做些什么来解决这个问题。
除了其他人回答的内容(包括存储无效日期不是一个好主意的非常好的建议)之外,您还可以指示 JDBC 驱动程序以不同的方式处理这些无效日期:
来自:http ://dev.mysql.com/doc/refman/5.5/en/connector-j-installing-upgrading.html
当遇到这些值时,Connector/J 3.1 默认会引发异常,因为根据 JDBC 和 SQL 标准,这是最正确的行为。可以使用 zeroDateTimeBehavior 配置属性修改此行为。允许的值是:
- 异常(默认值),它会引发 SQLException,SQLState 为 S1009。
- convertToNull,它返回 NULL 而不是日期。
- round,将日期四舍五入到最接近的值,即 0001-01-01。
我建议使用convertToNull
有关如何指定配置属性的说明,请参见此处。
“0000-00-00”是无效日期。它不应该存在于您的数据中。
因此,您需要:
清理数据并关闭 MySQL 配置中的 allow_invalid_dates(请参阅http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_allow_invalid_dates)
编写java代码来捕获日期异常并处理坏数据
按照 John Woo 的建议,编写 SQL 以替换无效日期的默认日期。
3 的问题是还有其他可能引发异常的无效日期(例如“2012-02-31”)。祝你好运。
如果您要从数据库中检索行,请格式化select
语句中的日期,
SELECT if(colDate = '0000-00-00', curdate(), colDate), ....
只需替换CURDATE()
为您想要的默认日期。出现异常的原因是因为0000-00-00
不是有效日期。