web-dev-qa-db-fra.com

Paramètre NLS_LANG pour le pilote léger JDBC?

J'utilise le pilote Oracle JDBC léger ver 10.2.0 (ojdbc14.jar). Je voudrais configurer son paramètre NLS_LANG manuellement. Y a-t-il un moyen?

Actuellement, il récupère ce paramètre à partir de la variable VM variable user.language (qui est définie automatiquement en définissant les paramètres régionaux actuels ou au démarrage à partir de l'environnement système).

Il s'agit d'un problème lorsque les utilisateurs basculent les paramètres régionaux de l'application sur un qui n'est pas pris en charge par le pilote Oracle JDBC (par exemple mk_MK). Dans ce cas, la prochaine fois que je récupère une connexion, j'obtiens l'exception suivante:

 ORA-00604: une erreur s'est produite au niveau SQL récursif 1 
 ORA-12705: impossible d'accéder aux fichiers de données NLS ou à un environnement non valide spécifié 

Je peux modifier les paramètres régionaux à la volée juste avant de récupérer la connexion et de revenir à celle sélectionnée par l'utilisateur dans les deux sens, mais cela semble non élégant et inefficace.

23
dasp

Les paramètres NLS_LANG sont dérivés de Java.util.Locale. Par conséquent, vous devrez effectuer un appel similaire à celui-ci avant de vous connecter:

Locale.setDefault(Locale.<your locale here>);
15
Adam Hawkes

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

Pour moi, la meilleure réponse a été FoxyBOA pour invoquer Java app with:

-Duser.country=en -Duser.language=en
17
Michał Niklas

Je luttais contre le même problème et j'ai découvert que les pilotes Oracle jdbc fins ne nécessitent pas de NLS_LANG ou de paramètres régionaux du système à spécifier. Mais lorsque vous vous connectez à des bases de données non anglaises, vous devez avoir orai18n.jar dans le chemin de classe.

de Oracle® Database JDBC Developer’s Guide and Reference

Fournir un soutien à la mondialisation

Les fichiers de base Java Archive (JAR), ojdbc5.jar et ojdbc6.jar, contiennent toutes les classes nécessaires pour fournir une prise en charge complète de la mondialisation pour:

  • Jeux de caractères Oracle pour les données CHAR, VARCHAR, LONGVARCHAR ou CLOB qui ne sont pas récupérées ou insérées en tant que membre de données d'un objet Oracle ou d'un type de collection.
  • Membres de données CHAR ou VARCHAR de l'objet et de la collection pour les jeux de caractères US7ASCII, WE8DEC, WE8ISO8859P1, WE8MSWIN1252 et UTF8.

Pour utiliser tout autre jeu de caractères dans les membres de données CHAR ou VARCHAR des objets ou des collections, vous devez inclure orai18n.jar dans la variable d'environnement CLASSPATH de votre application.

9
Stanislav

Invoquer Java avec les travaux suivants pour moi:

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

si "en" pour le pays provoque également ORA-12705 .

6
svante

Vous devez utiliser l'ancien pilote JDBC Oracle 9.2 qui est entièrement compatible et certifié avec Oracle 10g. L'ancien pilote n'utilise pas les commandes ALTER SESSION SET NLS_LANGUAGE.

1
user416472