如果我尝试这样做,我会遇到一个异常(见下文)
resultset.getString(“添加日期”);
对于包含日期时间值0000-00-00 00:00:00(DATETIME的准空值)的MySQL数据库的JDBC连接,即使我只是尝试将该值获取为字符串,而不是对象
我是通过做这些来逃避的
选择CAST(将日期添加为字符)作为添加日期
这很有效,但看起来很傻。。。有更好的方法吗
我的观点是,我只需要原始的DATETIME字符串,这样我就可以自己解析它了
注意:这里是0000的来源:http://dev.mysql.com/doc/refman/5.0/en/datetime.html)
非法的日期时间、日期或时间戳
值被转换为“零”
适当类型的值
(’0000-00-00:00:00’或
“0000-00-00”)
具体的例外情况如下:
SQLException:无法将值“0000-00-00:00:00”从第5列转换为时间戳。
SQLState:S1009
供应商错误:0
java.sql.SQLException:无法将值“0000-00-00 00:00:00”从第5列转换为时间戳。
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
位于com.mysql.jdbc.ResultSetImpl.getTimestampFromString(ResultSetImpl.java:6343)
位于com.mysql.jdbc.ResultSetImpl.getStringInternal(ResultSetImpl.java:5670)
位于com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5491)
位于com.mysql.jdbc.ResultSetImpl.getString(ResultSetImpl.java:5531)
备选答案是,您可以在数据源配置中直接使用此JDBC URL:
jdbc:mysql://yourserver:3306/yourdatabase?zeroDateTimeBehavior=convertToNull
编辑:
来源:MySQL手册
所有零组件(0000-00-00…)的日期时间-这些值在Java中无法可靠表示。连接器/J 3.0.x在从结果集读取时总是将其转换为NULL
默认情况下,当遇到这些值时,Connector/J 3.1会引发异常,因为根据JDBC和SQL标准,这是最正确的行为。可以使用zeroDateTimeBehavior配置属性修改此行为。允许值为:
- 异常(默认值),它抛出一个SQLState为S1009的SQLException
- convertToNull,返回NULL而不是日期
- 舍入,将日期舍入到最接近的值0001-01-01
更新:Alexander报告了一个影响mysql-connector-5.1.15功能的bug。请参见官方网站上的变更日志