五、有关数据库中的时间问题

2018-07-24  本文已影响0人  lifeline张

在从数据库中获取所有新闻的时候遇到这么一个bug:
Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP

这个bug是说不能把'0000-00-00 00:00:00'这个值转换为TIMESTAMP类型的数据。

解决方法:在url中这么写:

jdbc.connection=jdbc:mysql://localhost:3306/kgcnews?characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull

产生原因:
在Mysql数据库中使用DATETIME类型来存储时间,使用JDBC中读取这个字段的时候,应该使用ResultSet.getTimestamp(),这样会得到一个java.sql.TimeStamp类型的数据。在这里即不能使用ResultSet.getDate(),也不能使用ResultSet.getTime(),前者不包括time数据,后者不包括date数据。
当使用

news.setCreateDate(rs.getTime("createDate"));

运行结果:


image.png

当使用

news.setCreateDate(rs.getDate("createDate"));
image.png

但是在使用ResultSet.getTimestamp时也不是完全安全的,例如,当数据库中的TIMESTAMP类型的字段值为 '0000-00-00 00:00:00'时,使用此方法进行读取,会抛出异常:Cannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP,这是因为JDBC不能将'0000-00-00 00:00:00'转化为一个java.sql.Timestamp,在java中,想创建一个java.util.Date,其值为'0000-00-00 00:00:00'也是不能的,最古老的日期应该是'0001-01-01 00:00:00'。

解决方案:

String url = "jdbc:mysql://localhost:3306/test?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull";

上一篇下一篇

猜你喜欢

热点阅读