oracle10g獲取Date類型字段無時分秒解決辦法!


一般的數據庫中,DATE字段僅僅表示日期,不包括日期信息,而Oracle數據庫中的DATE數據類型是包括日期、時間的,對於不同的Oracle jdbc驅動版本,對於該問題的處理都有些區別。

最近使用 ORACLE 10G,時間字段因需求,設為了DATE類型,發現hibernate用native SQL 查詢或ibatis獲取result.getObject()的時候顯示不了時分秒,原來是JDBC驅動自動把date映射為 Java.sql.date,故截斷了時分秒信息,如果你使用9i或者11g 的驅動程序,就沒有該問題,但是Oracle10g的JDBC驅動,你會發現沒有時分秒 ,在Oracle9.2之后,引入了內置數據類型TIMESTAMP。之所以引入它,是因為內置數據類型DATE的最小單位為秒;DATE的主要問題是它粒度不能足夠區別出兩個事件哪個先發生。9.2版本后ORACLE在DATE數據類型上擴展出來了TIMESTAMP數據類型,它包括了所有DATE數據類型的年月日時分秒的信息,而且包括了小數秒(納秒Nanoseconds級的)的信息。如果你想把DATE類型轉換成TIMESTAMP類型,就使用CAST函數。 也正是從oracle 9.2開始,內置數據類型DATE和TIMESTAMP在使用9i的JDBC驅動做查詢時,DATE被映射為java.sql.Date,TIMESTAMP被映射為java.sql.Timestamp。 從Oracle11開始,其JDBC驅動程序又重新開始回歸為將內置類型DATE映射為java.sql.Timestamp(正如9.2之前的那樣)。 
所以,時分秒精度的丟失與hibernate無關,是oracle jdbc驅動的問題。

SO:

解決方法有以下兩個:

1、換jdbc驅動

2、數據庫中把data轉換成timestamp類型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM