2014-01-14 25 views
2

這與Default JDBC date format when reading date as a string from ResultSet的問題完全相同,但該問題從未實際回答過;人們只是提供了替代方法來編寫代碼。從JDBC結果集中將日期作爲字符串讀取時指定的日期格式在哪裏?

我特別詢問是否有人知道默認的轉換格式在哪裏指定,以及它是在什麼地方由JDBC規範定義的,或者只是由各個JDBC驅動程序決定。如果是後者,那麼Oracle 10g JDBC如何實現這個額外問題?

**新增15-JAN:

對不起,我想這個問題是不夠清楚,但顯然不是。我不是試圖從數據庫中檢索日期值,也不需要提供有關如何執行此操作的建議。

我不認爲這是引用問題的重複,這就是爲什麼我在這裏問了一個單獨的問題。雖然標題幾乎相同,但引用的問題(不管OP的意圖是什麼)已經用從數據庫檢索日期值的替代方法得到了回答,這不是我想知道的。

乾杯,

+0

爲什麼你需要以字符串的形式讀取日期?你想要在日期之後進行任何計算嗎?像比較,子串等 – Aarav

+1

你可能錯過了另一個問題上的答案的重點......問題是你的問題沒有意義。您應該通過['getDate'](http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getDate(int)]請求java.sql.Date對象。 )方法,不要求字符串。JDBC驅動程序的目的是在數據庫引擎和Java應用程序之間進行調解,以將本地定義的值轉換爲常見的Java對象。對於日期時間值,每個JDBC驅動程序的工作就是爲您提供java.sql.Date對象。從那裏你可以創建任何你想要的字符串。 –

+0

[從ResultSet中以字符串形式讀取日期時的默認JDBC日期格式]的可能重複(http://stackoverflow.com/questions/14700962/default-jdbc-date-format-when-reading-date-as-a-string -from-resultset) –

回答

1

好,通過JDBC代碼,以便跟蹤,它看起來像Oracle驅動程序硬編碼自己的格式:

int k = (((bytes[0 + j] & 255) - 100) * 100 + (bytes[1 + j] & 255)) - 100; 
    String s = k + "-" + toStr(bytes[2 + j]) 
     + "-" + toStr(bytes[3 + j]) 
     + " " + toStr(bytes[4 + j] - 1) 
     + ":" + toStr(bytes[5 + j] - 1) 
     + ":" + toStr(bytes[6 + j] - 1) 
     + ".0"; 

所以從這個,我猜:

  1. 這行爲在任何JDBC規範中都沒有指定。
  2. 每個驅動程序庫可能會返回任何喜歡的格式。

我假設這些是因爲不同的實現返回不同的格式。當然,這種格式仍然有可能在JDBC規範的某個地方被強制執行,並且某些實現不符合規範,但這似乎不大可能。我當然無法在JDBC規範中找到對此的任何引用(但這並不意味着它們不在某處!)。

但是,就我而言,關鍵點在於格式在庫中是硬編碼的,不能被任何環境或其他設置覆蓋,但只要驅動程序不會跨越系統更改庫版本保持不變。

+0

它總是以0結束?他們這次都在欺騙我們! :-) – 2014-01-17 01:16:38

0

Oracle 10g的JDBC是閉源的,所以我想我們永遠也不會知道:)但我敢打賭,它首先要求現場信息來源的服務器,並根據服務器的設置,它調整內部數據格式它將使用。我的2c。

+1

這是Java:沒有什麼是真正的封閉源:) – Barney

0

對於SQL日期類型,我不是100%確定所有數據庫的實現。但從Oracle database的javadoc中,似乎Oracle DB的DATE可以很容易地轉換爲java.sql.Date。對於MySQLPostgreSQL也是如此:SQL DATE可以轉換爲java.sql.Date

相關問題