• JAVA 处理 00000000 00:00:00值的时间


    这段时间来大家对数据库中存在的0000-00-00 00:00:00值的时间有点头疼,经过google和实际测试!

           可以在url后面加下面参数解决问题  zeroDateTimeBehavior=convertToNull

       比如**的连接数据库url可以配置为下面的样子:

    database.url=jdbc:mysql://****.mysql.rds.aliyuncs.com:3312/phoenix?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8

    http://hi.baidu.com/timelyxyz/item/8285c6e35189a21a595dd841

    zeroDateTimeBehavior=convertToNullCannot convert value '0000-00-00 00:00:00' from column 1 to TIMESTAMP2008年09月22日 星期一 11:13

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

    但是在使用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'也是不可能的,最古老的日期应该是'0001-01-01 00:00:00'。

    那么在程序中该怎么办捏? 解决方案在这里

    Datetimes with all-zero components (0000-00-00 ...) — These values can not be represented reliably in Java. Connector/J 3.0.x always converted them to NULL when being read from a ResultSet.

    Connector/J 3.1 throws an exception by default when these values are encountered as this is the most correct behavior according to the JDBC and SQL standards. This behavior can be modified using the zeroDateTimeBehavior configuration property. The allowable values are:

    • exception (the default), which throws an SQLException with an SQLState of S1009.
    • convertToNull, which returns NULL instead of the date.
    • round, which rounds the date to the nearest closest value which is 0001-01-01.

    Starting with Connector/J 3.1.7, ResultSet.getString() can be decoupled from this behavior via noDatetimeStringSync=true (the default value is false) so that you can retrieve the unaltered all-zero value as a String. It should be noted that this also precludes using any time zone conversions, therefore the driver will not allow you to enable noDatetimeStringSync and useTimezone at the same time.

    所以,在JDBC URL中加入zeroDateTimeBehavior信息,既可以解决:
    String url = "jdbc:mysql://10.149.51.80:3306/test?relaxAutoCommit=true&zeroDateTimeBehavior=convertToNull";

    当然,也可以使用另外一个策略:round

  • 相关阅读:
    SQL语句 分页实现
    PHPexcel入门教程
    json_decode返回null,使用echo json_last_error(); 返回4
    配置mysql可局域网内访问
    thinkphp5.0安装composer安装topthink/think-captcha
    linux下mysql忘记密码怎么办
    centos7 设置mysql账号密码开放3306端口实现远程登陆
    高级数据结构第七章A . 数列(树状数组逆序对)
    高级数据结构第六章E . 苹果树 (dfs+树状数组)
    高级数据结构第六章C . 奶牛狂欢节(两个树状数组)
  • 原文地址:https://www.cnblogs.com/lhj588/p/2973819.html
Copyright © 2020-2023  润新知