java.sql.Date的问题

本文介绍了使用Java操作Oracle数据库中的时间字段时遇到的问题及解决方案,包括如何正确地使用Timestamp类型来避免时间精度丢失,并提供了具体代码示例。
java.sql.Date对应标准sql里的Date类型,它会把时、分、秒、毫秒位置归零,除非确认程序逻辑的确要这样做,否则时间变量采用这种类型时会导致逻辑错误。

javadoc:
为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将小时、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。

怪不得插入以后再读出来,日期是对的,时间全是0

将数据类型改为java.util.date? 不行:java.sql.SQLException: 无效的列类型 Query

换用java.sql.timestamp,但是又得到java.lang.IllegalArgumentException: Cannot convert oracle.sql.TIMESTAMP@1d7e64f of type class oracle.sql.TIMESTAMP to class java.util.Date

最后搜到这一篇,先存着,应该可行
java操作oracle时间
作者:武林 日期:2009-04-21
字体大小: 小 中 大

以前也遇到到JAVA到oracle的时间问题,要不就是时间精度不够,要不是时间格式不正确,小问题能烦死人啊!

今天找到个方法了。当然不一定是最好,如果以后发现更好的解决方法再来改正。

首页oracle那头用于存储时间的类型用TIMESTAMP类型,然后java这边用下面代码进行时间格式化
Java代码

1. Calendar c=new GregorianCalendar();
2. java.util.Date d = c.getTime();
3. java.sql.Timestamp ts= new java.sql.Timestamp(d.getTime());

然后存入oracle。不过在oracle里头看的话会显示这种格式“21-4月 -09 04.20.34.562000 下午”。

不过没关系,只要取出来的时候不是这样就可以了。

接着取出时间,会发现这个时间精度很高,样式:“2009-04-21 16:59:38.093”

一般情况下我们只需要精确到秒就OK了,所以也要格式化一下:
Java代码

1. public static String getDate(Timestamp date) {
2. return new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(date);
3. }

OK了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值