美文网首页
五、有关数据库中的时间问题

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

作者: lifeline张 | 来源:发表于2018-07-24 15:40 被阅读0次

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

    相关文章

      网友评论

          本文标题:五、有关数据库中的时间问题

          本文链接:https://www.haomeiwen.com/subject/trfymftx.html