在mysql表中有一字段为日期字段,(timestamp 或 datetime都试过),默认值为0000-00-00 00:00:00此时向表中插入一条记录,如果不写入此日期字段任何值,也就是使用他的默认值'0000-00-00 00:00:00'那么在java中获取此记录,无论使用rs.getDate()、rs.getObject()、rs.getTimestamp()、等都报错。
错误信息为:
Value '0000-00-00' can not be represented as java.sql.Timestamp: Value '0000-00-00' can not be represented as java.sql.Timestamp如果向此字段写入一个正常的日期读取出就不会报错.由于此字段为非必须字段,所以如果在用户不选择写入,那么必须写入一个默认值。但现在写入一个默认值0000-00-00 00:00:00 用java就读不出来。为什么呢?由于系统要求统计性,必须使用日期timestamp类型字段。本来一直使用long型就没这问题。各位使用mysql碰到过这个问题吗?我用的是mysql5.0.急!!!啊!

解决方案 »

  1.   

    最简单办法:把此字段默认值设为null.
      

  2.   

    一般我我用 rs.getString(字段名);
    没出过错
      

  3.   

    我也是用 rs.getString(字段名);取出来在转换
      

  4.   

    朋友,你可以当用户不填就设置为当前时间啊
      还有就是用java.util.Date;这个类来接啊``
      你那个java.sql里面的Date好象没有后面的时分秒!
      

  5.   

    默认值0000-00-00 00:00:00 用java就读不出来。为什么呢?
    because mysql judged the default 0000-00-00 00.... as null.
      

  6.   

    getString()也试过,还是报错。
      

  7.   

    现在不是读出读不出的问题,是一读就报错Value '0000-00-00' can not be represented as java.sql.Timestamp: Value '0000-00-00' can not be represented as java.sql.Timestamp
    所有rs.getxxxx的方法都试过了,就是一读就报错,为什么?  如何解决这个问题?
      

  8.   

    我想可能是JDBC Driver的问题.你可以试下别的Driver 实现.
      

  9.   

    应该是mysql jdbc驱动解析这个值的问题. 驱动和数据库不匹配. 1. 要么你用null表示空
    2. 要么不要向里面写默认为0000....这样的数据
    3. 要么使用getString自己分析
      

  10.   

    to TinyJimmy(Jimmy) 1. 要么你用null表示空
       mysql里面的timestamp不能设置默认为null2. 要么不要向里面写默认为0000....这样的数据
       mysql里面的timestamp默认就是0000-00-00 00:00:00,而且不许为空。不是我手工所设置的。
     
    3. 要么使用getString自己分析
       现在使用getXXXX的各种方法都试了,一读就报错,根据取不出。如何解释?
      

  11.   

    呵呵,时间当然不能这样用了,因为java的时间是从GMT1970-01-01 00:00:00开始的,所以楼主数据默认时间当然不能作为一个时间对象的初试化变量了,可以把默认的时间该成是1970-01-01 00:00:00只后的;如果一定要用在这个时间点之前的时间的话,建议用字符类型作为数据库的时间标记,爱怎么写就怎么写,嘿嘿
      

  12.   

    to alexwan(一年抗战) 
    我信誉值低,你得问csdn啊!是他们弄的,我也不太清楚。
      

  13.   

    我的信誉值低也是CSDN弄的,我贴必结了都没恢复过来。我怀疑你就是那行的数据有问题,你试下确认是读到哪行时就报错,把那行删除了,看看是不是还是那样。还有,可能你的旧版本的MYSQL驱程只支持4.0或以下的,你上官网下载个最新版的试试吧。
      

  14.   

    getString()方法是肯定兼容所有字段类型的,如果这都不行,八成是驱动程序的问题
      

  15.   

    as you say"mysql里面的timestamp默认就是0000-00-00 00:00:00,而且不许为空。"
    that is mysql jdbc's problem,you can try
    1.add this to your mysql jdbc url: 
    zeroDateTimeBehavior=convertToNull 
    Here is the MySQL reference page for more info: 
    http://dev.mysql.com/doc/refman/5.0/en/cj-configuration-properties.html
    2.use the newest mysql jdbc driver
      

  16.   

    Property Name : zeroDateTimeBehavior:
    Definition:
    What should happen when the driver encounters DATETIME values that are composed entirely of zeroes (used by MySQL to represent invalid dates)? Valid values are 'exception', 'round' and 'convertToNull'. 
    Required:         No 
    Default Value :   exception 
    Since Version :   3.1
      

  17.   

    问题终于解决了,原来我使用的mysql的jdbc驱动5.0版的对日期类型支持不太好,换回mysql的jdbc驱动3.0版本就好了。看来不能一味的追求新东西。