我目前的问题是我无法从我的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
有没有人知道如何解决这个问题。
答案 0 :(得分:1)
'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')也可能引发异常。祝你好运。
答案 1 :(得分:1)
除了其他人已经回答的内容(包括非常好的建议,存储无效日期不是一个好主意),您还可以指示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
有关如何指定配置属性的说明,请参阅here。
答案 2 :(得分:0)
如果要从数据库中检索行,请在select
语句中格式化日期
SELECT if(colDate = '0000-00-00', curdate(), colDate), ....
只需将CURDATE()
替换为您想要的默认日期即可。出现异常的原因是因为0000-00-00
不是有效日期。