jdbcの中にNLS_DATE_FORMATを設定しようとしましたが、何の効果もないようです。 私のコード:NLS_DATE_FORMAT with JDBC
//...
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
しかし、それは働いていない:
だから私はこれを試してみました。代わりに、私はOracle 11gのは、OracleのJDBCドライブ12.1を使用して
2015-10-10 00:00:00.0
を取得
10-OCT-15 (NLS_DATE_FORMAT for US = 'DD-MON-RR')
ような何かを得るための、JDBCドライバのJava 8
'DATE'カラムの' ResultSet.getString() 'は、DBMS固有の" NLS設定 "を尊重することはありません。データベースから取得した日付の値に対して単にjava.sql.Timestamp.toString()を呼び出します。しかし、暗黙的なデータ型変換に頼ることは、まずは悪い考えです。 'getTimestamp()'を使い、 'SimpleDateFormat'を使ってあなたのJavaコードで必要な書式を適用するか、SELECT文中で' to_char() 'を使ってそれを書式化します。 –
@a_horse_with_no_name toString()が呼び出されたと思います。しかし、Data.toStringのdocをチェックすると、日付を日付エスケープ形式yyyy-mm-ddでフォーマットします。それは実際に私が持っているフォーマットではない?どう思いますか ?ありがとう – iman
'java.sql.Date.toString()'はそのフォーマットを返します。組み込みです。 'System.out.pringln(新しいjava.sql.Date(0).toString())'を試すことができます。 'java.sql.Timestamp'でも同じことが当てはまります –