java.sql的Date、Timestamp与oracle的date,timestamp的对应关系

遇到一个很严重的问题是,用pl/sql develop查看oralce的date声明的字段时,明明包含有日期和时间,但是查出来的数据切只含的日期,时间的小时、分和秒都为零。而且系统中,当在前台传java.sql.Date类型的数据到oracle的存储过程中,插入数据库后,在前台显示却是包括时分钟的;而用存储过程自身的sysdate却不包含。


原来,java.slq.Date的定义本身是表示日期,不包含时间,你可以试试,把java.sql.Date转换成yy-MM-dd HH:mm:ss,会发现在它不包含时间。但为了与后台数据库传输日期是,但本身是包含毫秒级的时间(肯定是long类型)。

而oralce的date类型是包含日期和时间,精确到秒,而timestamp是比date更精确的时间,可到秒后的六位数。

所以问题就出现,你从一个表中查出date类型字段(由sysdate 插入时),在前台用statement.getDate取就无法显示日期了,只能用statment.getTimestamp才能取到日期和时间。虽然说Oracle的date类型在jdbc看来仍是Date,你可以用ResultSetMetaData rsm = rs.getMetaData();

int columnType = rsm.getColumnType(j); 查看出来。

但是从前台插入时,明明是java.sql.date,取出时是却是timestamp,那是因为在date在传输仍然会包含毫秒级的值,在oracle后台,根本没有把转换成date,却侟储的是timestamp的值。

就是这个原因。

你可能感兴趣的:(java,oracle,sql,Hibernate,jdbc)