在从数据库中获取所有新闻的时候遇到这么一个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";
网友评论