2011-01-13 2 views
2

У меня есть вопрос, который заставляет меня с ума на моем ноутбуке я есть оракул-х 10.2.0 на убунтуСтарый и избили ORA-12705: Не удается получить доступ к файлам данных NLS или недействительный среде, указанной и Java Locale.setDefault()

DB Charset: AMERICAN_AMERICA.AL32UTF8

NLS_LANG = AMERICAN_AMERICA.AL32UTF8

public static void main(String[] args) throws Exception { 

// Default locale before overwriting is ru_RU 
// Locale.setDefault(new Locale("EN")); 
// 
    Class.forName("oracle.jdbc.driver.OracleDriver"); 

    Connection conn = DriverManager.getConnection(
     "jdbc:oracle:thin:@localhost:1521:xe", "test", "test"); 
    try { 
    // @machineName:port:SID, userid, password 

     Statement stmt = conn.createStatement(); 
     try { 
     ResultSet rset = stmt 
      .executeQuery("select * from test"); 
     try { 
      while (rset.next()) 
      System.out.println(rset.getString(1)); // Print col 1 
     } finally { 
      try { 
      rset.close(); 
      } catch (Exception ignore) { 
      } 
     } 
     } finally { 
     try { 
      stmt.close(); 
     } catch (Exception ignore) { 
     } 
     } 
    } finally { 
     try { 
     conn.close(); 
     } catch (Exception ignore) { 
     } 
    } 
    } 

Если я комментарий Locale.setDefault я есть ORA-12705: не удается получить доступ к файлам данных NLS или недействительный окружения указанного исключения (локаль по умолчанию в этом случае остается ru_RU), но если я устанавливаю стандартную локаль в EN, тогда все в порядке.

Что это может означать? Почему оно используется для определения значения Locale.getDefault вместо NLS_LANG, как написано в каждой статье об этом?

Благодаря

ответ

0

По умолчанию JDBC локали определяется локалью виртуальной машины Java, NLS_LANG игнорируется. Другой способ изменения языка - указать аргументы командной строки -Duser.language и -Duser.country.

0

Используйте эти опции VM: -Duser.region = US -Duser.language = еп -Duser.country = US