无法从mysql检索日期到JDBC

时间:2012-09-26 17:01:24

标签: java mysql jdbc

我目前的问题是我无法从我的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

有没有人知道如何解决这个问题。

我已尝试thisthis但我仍然遇到同样的两个错误,这两个错误都是由日期引起的

3 个答案:

答案 0 :(得分:1)

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

因此,您需要:

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

  2. 编写java代码以捕获日期异常并处理错误数据

  3. 根据John Woo的建议,编写SQL以替换无效日期的默认日期。

  4. 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不是有效日期。