dje*_*lin 3 java mysql sql date jdbc
我得到了这个例外:
java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
Run Code Online (Sandbox Code Playgroud)
源自此代码:
Date internalDate = rs.getDate(idx++);
Run Code Online (Sandbox Code Playgroud)
哪里rs是ResultSet.
所以这对我来说没问题 - 我知道数据库中有零日期,我需要能够读取这些并将它们转换为我的下游数据结构中的适当(可能为空)数据.问题是我不知道如何检索它并得到"软"错误.我想在SQLException的try/catch中包装这一行但是理解这会破坏ResultSet的有效性.
是否可以在不抛出SQLException的情况下以另一种方式读取此值?
a_h*_*ame 10
您需要告诉JDBC驱动程序将它们转换为NULL.这是通过zeroDateTimeBehavior使用值传递连接属性名称来完成的convertToNull
有关更多详细信息,请参阅手册:http://dev.mysql.com/doc/refman/4.1/en/connector-j-installing-upgrading.html
我喜欢@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,
...
Run Code Online (Sandbox Code Playgroud)
或稍微简洁,但仅限mysql,选项:
if(my_date_col = '0000-00-00', null, my_date_col) as my_date_col
Run Code Online (Sandbox Code Playgroud)
此外,建议谨慎更改整个应用程序的JDBC行为,因为您可能会破坏依赖于返回此类日期的代码 - 也许他们会使用它们rs.getString(i).您必须回归测试所有其他查询以确保.
| 归档时间: |
|
| 查看次数: |
6081 次 |
| 最近记录: |