2009-07-03 5 views
23

Ich verwende den Oracle JDBC-Treiber mit der Version 10.2.0 (ojdbc14.jar). Ich möchte seine NLS_LANG Einstellung manuell konfigurieren. Gibt es einen Weg?NLS_LANG Einstellung für JDBC Thin-Treiber?

Momentan wird diese Einstellung von der VM-Variablen user.language abgerufen (die automatisch durch Festlegen der aktuellen Ländereinstellung oder beim Start aus der Systemumgebung festgelegt wird).

Dies ist ein Problem, wenn die Benutzer das Anwendungsgebietsschema auf eine ändern, die vom Oracle-JDBC-Treiber (z. B. mk_MK) nicht unterstützt wird. In diesem Fall hole das nächste Mal, wenn ich eine Verbindung, die ich die folgende Ausnahme erhalten:

 
ORA-00604: error occurred at recursive SQL level 1 
ORA-12705: Cannot access NLS data files or invalid environment specified 

ich das Gebietsschema im laufenden Betrieb ändern kann, kurz bevor ich die Verbindung und wechseln Sie wieder auf die Benutzer ausgewählten hin und her holen, aber das scheint unelegant und uneffizient.

Antwort

13

Die NLS_LANG-Einstellungen sind von java.util.Locale abgeleitet. Daher müssen Sie vor dem Anschließen eines Anrufs ähnlich wie dies machen:

Locale.setDefault(Locale.<your locale here>); 
+1

Ja, genau das habe ich getan. Es funktioniert gut, aber es ist nicht sehr hübsch. Vielen Dank! – dasp

9

Ich kämpfte das gleiche Problem und fand heraus, dass dünne jdbc Oracle-Treiber benötigen keine NLS_LANG oder Systemgebietsschema angegeben werden. Aber wenn Sie eine Verbindung zu nicht-englischen Datenbanken herstellen, sollten Sie orai18n.jar im Klassenpfad haben.

von Oracle® Database JDBC-Entwicklerhandbuch und Referenz

Bereitstellung Globalisierung Unterstützung

Die grundlegenden Java-Archiv (JAR-Dateien), ojdbc5.jar und ojdbc6.jar, enthalten alle die erforderlichen Klassen, um vollständige Unterstützung für die Globalisierung zu bieten:

  • Oracle-Zeichensätze für CHAR, VARCHAR, LONGVARCHAR oder CLOB- Daten , die nicht abgerufen wird oder als ein Datenelement eines Objekts oder einer Sammlung Typ Oracle eingefügt.
  • CHAR oder VARCHAR Datenelemente des Objekts und Sammlung für die Zeichensätze US7ASCII, WE8DEC, WE8ISO8859P1, WE8MSWIN1252 und UTF-8.

Um andere Zeichensätze in CHAR oder VARCHAR Datenelementen von Objekten oder Sammlungen zu verwenden, müssen Sie umfassen orai18n.jar in den CLASSPATH Umgebungsvariable Ihrer Anwendung.

+0

http://docs.oracle.com/cd/E18283_01/java.112/e16548/global.htm – Raven

17

Siehe auch: https://serverfault.com/questions/63216/ora-12705-cannot-access-nls-data-files-or-invalid-environment-specified/64536

Für mich ist die beste Antwort war von FoxyBOA Java-Anwendung aufzurufen, mit:

-Duser.country=en -Duser.language=en 
+0

Lustig. Stimmen Sie für eigene Antwort kreuzweise hier: D – FoxyBOA

+1

+1 als es ist viel weniger invasiv als die derzeit akzeptierte Antwort. –

+0

Danke. Arbeitete für SQLDeveloper und auch für Weblogik-Datenquelle – WelcomeTo

1

Sie sollten den alten Oracle 9.2 JDBC-Treiber verwenden, die vollständig kompatibel ist und zertifiziert mit Oracle 10g. Der alte Treiber verwendet ALTER SESSION SET NLS_LANGUAGE Befehle nicht.

6

Aufrufe Java mit folgenden Arbeiten für mich:

-Duser.country=us -Duser.language=en 

wenn "en" für Land verursacht auch ORA-12705.

+0

Das ist, weil es kein "EN" Land gibt. Es gibt: US, GB und viele andere, die Englisch als Amtssprache haben –