Oracle9或11使用了Oracle10的驅動引起的時間丟失

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.