java - 如何在 jdbc MySQL 查询中处理 0000-00-00 日期

标签 java mysql sql date jdbc

我遇到了这个异常:

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

源自此代码:

Date internalDate = rs.getDate(idx++);

其中 rs 是一个 ResultSet

所以这对我来说很好 - 我知道数据库中有零日期,我需要能够读取这些日期并将它们转换为下游数据结构中的适当(可能为空)数据。问题是我不知道如何检索它并得到一个“软”错误。我考虑过将此行包装在 SQLException 的 try/catch 中,但我知道这会破坏 ResultSet 的有效性。

是否可以在不抛出 SQLException 的情况下以另一种方式读取该值?

最佳答案

我喜欢@a_horse_with_no_name的答案,但是如果您无法控制连接,则可以更改查询以返回 null:

select
    ...
    case when my_date_col = '0000-00-00' then null else my_date_col end as my_date_col,
    ...

或稍微更简洁但仅限 mysql 的选项:

    if(my_date_col = '0000-00-00', null, my_date_col) as my_date_col


此外,建议谨慎更改整个应用程序的 JDBC 行为,因为您可能会破坏依赖于返回此类日期的代码 - 也许他们会改用 rs.getString(i)。您必须对所有其他查询进行回归测试才能确定。

关于java - 如何在 jdbc MySQL 查询中处理 0000-00-00 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13633747/

相关文章:

java - org.json.JSONException : End of input at character 0

sql - 如何在sql select语句中加入属性?

php - 全文检索2表

mysql - 在 1 个查询中获取测验数据、问题和答案?

sql - 将查询中的单个列与多个列聚合

java - MongoDB : Sorting Data when using DBcollection find

java - 将 jTextField 恢复为最后一个有效值

Java - 输出不打印?

mysql - SQL : MAX of summing the values of 2 columns

mysql - 如何使用 Snap 的 MysqlSimple snaplet 连接到 MySQL