2009-07-03 28 views
23

Sto utilizzando il driver Oracle JDBC sottile ver 10.2.0 (ojdbc14.jar). Vorrei configurare manualmente la sua impostazione NLS_LANG. C'è un modo?Impostazione NLS_LANG per driver sottile JDBC?

Attualmente recupera questa impostazione dalla variabile VM user.language (che viene impostata automaticamente impostando la locale corrente o all'avvio dall'ambiente di sistema).

Questo è un problema quando gli utenti cambiano il locale dell'applicazione su uno non supportato dal driver JDBC Oracle (ad es. Mk_MK). In questo caso, la prossima volta che vado a prendere una connessione ottengo la seguente eccezione:

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

posso cambiare le impostazioni internazionali al volo poco prima di prendere il collegamento e tornare a selezionata schiena dell'utente e indietro, ma questo sembra poco elegante e poco efficiente.

risposta

13

Le impostazioni di NLS_LANG sono derivate da java.util.Locale. Pertanto, è necessario effettuare una chiamata simile a questo prima di collegare:

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

Sì, questo è esattamente ciò che ho fatto per finire. Funziona bene, ma non è molto carina. Grazie! – dasp

9

stavo combattendo lo stesso problema e ha scoperto che i conducenti sottile JDBC Oracle non richiedono NLS_LANG o locale del sistema da specificare. Ma quando ti connetti a database non inglesi devi avere orai18n.jar nel classpath.

dalla Guida di riferimento

Fornendo il supporto di globalizzazione Oracle® Database JDBC dell'autore

i file di base Java Archive (JAR), ojdbc5.jar e ojdbc6.jar, contenere tutte le classi necessarie per fornire il supporto completo di globalizzazione per:

  • set di caratteri Oracle per CHAR, VARCHAR , LongVarChar o CLOB dati che non viene recuperata o inserito come un membro di dati di un oggetto o di raccolta tipo Oracle .
  • CHAR o membri di dati VARCHAR di oggetto e collezione per il set di caratteri US7ASCII, WE8DEC, WE8ISO8859P1, WE8MSWIN1252 e UTF8.

Per utilizzare qualsiasi altro set di caratteri in CHAR o VARCHAR membri di dati di oggetti o raccolta devi includere orai18n.jar nella variabile d'ambiente CLASSPATH dell'applicazione .

+0

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

17

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

Per me la risposta migliore era di FoxyBOA invocare applicazione Java con:

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

Divertente. Vota la tua risposta incrociata qui: D – FoxyBOA

+1

+1 in quanto è molto meno invasiva della risposta attualmente accettata. –

+0

Grazie. Ha funzionato per SQLDeveloper e anche per l'origine dati logico Web – WelcomeTo

1

Si dovrebbe utilizzare il vecchio Oracle 9.2 driver JDBC che è interamente compatibile e certificata con Oracle 10g. Il vecchio driver non usa i comandi ALS SESSION SET NLS_LANGUAGE.

6

Invocare Java con le seguenti opere per me:

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

se "en" per paese causa anche ORA-12705.

+0

Questo perché non esiste un paese "EN". Ci sono: Stati Uniti, Gran Bretagna e molti altri che hanno l'inglese come lingua ufficiale –

Problemi correlati