2012-12-28 45 views
1

目標存儲在自定義格式日期:錯誤使用TO_DATE

  1. 我要存儲在數據庫中的日期格式dd/MM/yyyy

  2. 我已經先格式化它使用DateFormat導致其更改爲String數據類型,然後試圖通過使用to_date功能轉換回日期數據類型,但它被存儲在爲19-DEC-12dd-MON-yy格式。

代碼:

DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
java.util.Date dob=JDateChooser.getDate(); 
java.sql.Date dobloc=new java.sql.Date(dob.getTime()); 
String dobloc1=df.format(dobloc); 
String sql="INSERT INTO ADMIN.DEPARTMENT(date_of_birth) VALUES (to_date(?,'dd/MM/yyyy'))" 
PreparedStatement pst = conn.prepareStatement(sql); 
pst.setString(1, dobloc1);   
+0

就我們直接'java.sql.Date'來說,你很困惑表示格式和存儲格式。 –

回答

2

日期無法跟上你在任何數據庫中指定的格式(除非你使用一個字符串字段)大多數數據庫系統存儲的日期時間值作爲一個「雙」的價值。

您應該將日期放入數據庫,並且在從數據庫獲取數據或將數據呈現給用戶時擔心格式化。

+0

其實我試圖以正確的格式存儲,因爲我使用JTable在其他一些窗體上顯示了我的數據庫表的純副本,所以日期格式在其中存儲日期直接顯示。我不想在我的大量Jtables上轉換日期格式,這可能會使我一次又一次地更改日期格式,因爲我的表格不斷增加 – Akki

+0

我對JTable並不熟悉,但我仍然相信您不應該擔心使用哪種格式插入數據,而是以何種格式顯示JTable中的數據。這是因爲不管你做什麼,數據庫引擎都不會保存關於以何種格式插入數據的任何信息。它只是將日期保持爲本地值。但由於我不熟悉JTable,我不會堅持:) –

1

我認爲您誤解了Oracle在Oracle中的實際工作方式。
日期不像「19-DEC-12」或「19/12/2012」那樣存儲,它以7字節的形式存儲。

有關詳細信息,請參見here

如果您選擇日期列,則使用NLS_DATE_FORMAT格式化它。 這是用於格式化這7個字節的默認掩碼。

當然,如果您使用像to_char(sysdate,'YYYY MM DD')這樣的自定義格式掩碼,則會忽略默認的NLS_DATE_FORMAT。

正如我在上面的評論

其實我想是因爲我使用的JTable所以日期格式的一些其他形式顯示我的數據庫表的純副本以正確的格式存儲讀取其中存儲日期直接顯示。我不想日期格式轉換我的大量JTable中的這可能使我一次又一次地改變日期格式爲我的表繼續增加

我建議你還可以節省用於格式化的具體格式化掩碼日期在你的數據庫表中的另一列。 在JTable中顯示日期之前,使用此掩碼使用DateFormat對其進行格式化。