我遇到了这个异常:
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/