急!!mysql中日期字段为何读不出来?

jk3278jk 2006-04-05 10:43:25
在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.

急!!!啊!
...全文
449 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
jk3278jk 2006-04-06
  • 打赏
  • 举报
回复
问题终于解决了,原来我使用的mysql的jdbc驱动5.0版的对日期类型支持不太好,换回mysql的jdbc驱动3.0版本就好了。

看来不能一味的追求新东西。


boy 2006-04-06
  • 打赏
  • 举报
回复
用一个固定的历史日期作缺省值
laughsmile 2006-04-06
  • 打赏
  • 举报
回复
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
laughsmile 2006-04-06
  • 打赏
  • 举报
回复
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
jk3278jk 2006-04-05
  • 打赏
  • 举报
回复
getString()也试过,还是报错。
slayerbb 2006-04-05
  • 打赏
  • 举报
回复
默认值0000-00-00 00:00:00 用java就读不出来。为什么呢?
because mysql judged the default 0000-00-00 00.... as null.

ZJQ100 2006-04-05
  • 打赏
  • 举报
回复
帮你顶一下
MagicianLiu 2006-04-05
  • 打赏
  • 举报
回复
用getString试试。然后转成Date
Net8Java 2006-04-05
  • 打赏
  • 举报
回复
朋友,你可以当用户不填就设置为当前时间啊
还有就是用java.util.Date;这个类来接啊``
你那个java.sql里面的Date好象没有后面的时分秒!
leon_jiang 2006-04-05
  • 打赏
  • 举报
回复
我也是用 rs.getString(字段名);

取出来在转换
Paripatetic 2006-04-05
  • 打赏
  • 举报
回复
一般我我用 rs.getString(字段名);
没出过错
Saro 2006-04-05
  • 打赏
  • 举报
回复
最简单办法:把此字段默认值设为null.
terry_yip 2006-04-05
  • 打赏
  • 举报
回复
getString()方法是肯定兼容所有字段类型的,如果这都不行,八成是驱动程序的问题
terry_yip 2006-04-05
  • 打赏
  • 举报
回复
我的信誉值低也是CSDN弄的,我贴必结了都没恢复过来。

我怀疑你就是那行的数据有问题,你试下确认是读到哪行时就报错,把那行删除了,看看是不是还是那样。还有,可能你的旧版本的MYSQL驱程只支持4.0或以下的,你上官网下载个最新版的试试吧。

jk3278jk 2006-04-05
  • 打赏
  • 举报
回复
我花200分解决一个小问题,没人能解决吗?

真的没有人碰到过吗?????急!!
jk3278jk 2006-04-05
  • 打赏
  • 举报
回复
to alexwan(一年抗战)
我信誉值低,你得问csdn啊!是他们弄的,我也不太清楚。
洪泉 2006-04-05
  • 打赏
  • 举报
回复
PS:楼主的信誉值咋这么低啊?==!
洪泉 2006-04-05
  • 打赏
  • 举报
回复
呵呵,时间当然不能这样用了,因为java的时间是从GMT1970-01-01 00:00:00开始的,所以楼主数据默认时间当然不能作为一个时间对象的初试化变量了,可以把默认的时间该成是1970-01-01 00:00:00只后的;如果一定要用在这个时间点之前的时间的话,建议用字符类型作为数据库的时间标记,爱怎么写就怎么写,嘿嘿
jk3278jk 2006-04-05
  • 打赏
  • 举报
回复
to TinyJimmy(Jimmy)

1. 要么你用null表示空
mysql里面的timestamp不能设置默认为null

2. 要么不要向里面写默认为0000....这样的数据
mysql里面的timestamp默认就是0000-00-00 00:00:00,而且不许为空。不是我手工所设置的。

3. 要么使用getString自己分析
现在使用getXXXX的各种方法都试了,一读就报错,根据取不出。如何解释?
yyjzsl 2006-04-05
  • 打赏
  • 举报
回复
偶也是用rs.getString(字段名);

加载更多回复(3)

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧