java.sql.Date的问题

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了!

你可能感兴趣的:(java,oracle,sql,C++,c)