0

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

有没有人知道可以做些什么来解决这个问题。

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

4

3 回答 3

2

除了其他人回答的内容(包括存储无效日期不是一个好主意的非常好的建议)之外,您还可以指示 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

有关如何指定配置属性的说明,请参见此处。

于 2012-09-26T18:27:02.423 回答
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 以替换无效日期的默认日期。

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

于 2012-09-26T17:57:06.647 回答
0

如果您要从数据库中检索行,请格式化select语句中的日期,

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

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

于 2012-09-26T17:04:48.093 回答