2012-09-26 59 views
0

,我目前所面对的是我能不能检索从我的MySQL数据库中的日期对象的问题,到目前为止,不管我怎么努力,我要么得到无法检索从MySQL日期为JDBC

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 

java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date 

有没有人有一个想法,可以做些什么来解决这个问题。

我已经尝试thisthis但我还是来了两个相同的错误,这些错误都是由日期引起

回答

1

'0000-00-00'是无效日期。它不应该存在于您的数据中。

因此,你需要:

  1. 清理数据并关闭ALLOW_INVALID_DATES在你的MySQL配置(见http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_allow_invalid_dates

  2. 编写Java代码捕捉日期的异常和处理坏数据

  3. 按照John Woo的建议,编写SQL以将默认日期替换为无效日期。

3的问题在于还有其他无效日期(例如'2012-02-31')可能会引发异常。祝你好运。

+0

数据不应该是无效的,尽管我使用的测试数据是强迫它使用默认日期 – adam2510

0

如果你是从数据库中检索行,你select语句格式中的日期,

SELECT if(colDate = '0000-00-00', curdate(), colDate), .... 

只是将CURDATE()替换为您想要的默认日期。出现异常的原因是因为0000-00-00不是有效日期。

1

除了什么其他回答(包括非常好的建议,存储无效的日期是不是一个好主意),你还可以指示JDBC驱动程序以不同的方式处理那些无效的日期:

来源: http://dev.mysql.com/doc/refman/5.5/en/connector-j-installing-upgrading.html

当遇到这些值时,Connector/J 3.1默认会引发异常,因为根据JDBC和SQL标准,这是最正确的行为。可以使用zeroDateTimeBehavior配置属性修改此行为。允许的值为:

-     异常(默认值),它引发SQLException与S1009的SQLState。
-     convertToNull,它返回NULL而不是日期。
-     round,其将日期舍入为最接近的最接近0001-01-01的值。

我会建议使用convertToNull

关于如何指定配置属性说明,请参见here