我試圖在jdbc裏設置NLS_DATE_FORMAT,它似乎沒有任何效果。 我的代碼:帶JDBC的NLS_DATE_FORMAT
//...
Connection conn = ods.getConnection();
Statement stat = conn.createStatement();
stat.execute("alter session set NLS_DATE_FORMAT='YYYY-DD-MM'");
ResultSet rs = stat.executeQuery("select date_column from test_table");
System.out.println(rs.getString(1)); // *** new format not effective here ***
//...
經過一番閱讀。我瞭解NLS_DATE_FORMAT在JDBC驅動程序中是硬編碼的。它是否正確 ?總之,從本作:
語言和地域
Thin驅動程序從JVM user.language屬性的Java語言環境獲得語言和地區設置(NLS_LANGUAGE和NLS_TERRITORY)。日期格式(NLS_DATE_FORMAT)根據地區設置進行設置。
所以,我想這一點:
Locale.setDefault(new Locale("en", "US"));
Connection conn = ods.getConnection();
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("select date_column from test_table");
System.out.println(rs.getString(1)); // *** JVM format not effective here
但它不工作。相反,越來越像
10-OCT-15 (NLS_DATE_FORMAT for US = 'DD-MON-RR')
我得到
2015-10-10 00:00:00.0
從JDBC驅動程序使用Oracle 11g,甲骨文JDBC驅動12.1,JAVA 8
「DATE」列上的'ResultSet.getString()'永遠不會遵循DBMS特定的「NLS設置」。它只是從數據庫獲得的日期值上調用'java.sql.Timestamp.toString()'。但是依賴任何隱式數據類型轉換是一個不好的主意。使用'getTimestamp()'並使用'SimpleDateFormat'在您的Java代碼中應用您想要的格式,或者在SELECT語句中使用'to_char()'讓Oracle對其進行格式化。 –
@a_horse_with_no_name我想相信toString()被調用。但是在檢查Data.toString的文檔時:以日期轉義格式yyyy-mm-dd格式化日期。這不是我得到的格式嗎?你怎麼看 ?謝謝 – iman
'java.sql.Date.toString()'返回格式 - 它是內置的。你可以自己嘗試'System.out.pringln(new java.sql.Date(0).toString())'。 java.sql.Timestamp' –