Oracle中在DDL的時候,列類型date是包括時間+時間的,並且精確到毫秒. 不存在僅僅是日期(不包括時間)的列類型,而列類型timestamp可以認為是精度更高的date類型,能精確到納秒(在windows作業系統只能精確到1000納秒)。
Java中的Date類有二種,一種是帶時間的java.util.Date,一種是不帶時間僅有日期的java.sql.Date.還有一種是既帶時間又帶日期的java.sql.Timestamp.
一.java寫oracle
1.java寫入oracle的date列時:
java.util.Date,java.sql.Timestamp二種類型不僅會寫入日期還會寫入時間.
java.sql.Date,Oracle只會寫入日誌,時間部分會使用預設的00:00:00來儲存.
2.java寫入oracle的timestamp列時:
應該使用java.sql.Timestamp
二.oracle讀到java
1.如果是date類型的列(比較麻煩,如果使用了現有的驅動ojdbc14, 在將date類型轉換成java的date類時,會使用java.util.Date的繼承類java.sql.Date,而不是java.util.Date,由於前者不會保留時間部分,只有日期.導致查詢出來的時間部分丟失.)
java如果使用了錯誤的驅動,有三種解決辦法:
1)解決的辦法: (1).將date類型改為timestamp類型(不推薦使用). (2).在datasource的串連參數裡設定oracle.jdbc.V8Compatible=true;(相容老的驅動程式,由於老的驅動是正確轉換的,這樣會將date列正確轉換成java.util.Date
2)將date列類型轉成timestamp類型. Oracle的所有驅動都會將timestamp轉換成java.sql.Timestamp. 肯定不會丟失時間部分
參考文章:
http://www.blogjava.net/midea0978/archive/2008/06/13/207655.html