web-dev-qa-db-ja.com

JDBCシンドライバーのNLS_LANG設定?

シンOracle JDBCドライバーバージョン10.2.0(ojdbc14.jar)を使用しています。 NLS_LANG設定を手動で構成したいと思います。方法はありますか?

現在、この設定はVM変数user.language(現在のロケールの設定によって自動的に設定されるか、システム環境からの起動時に設定されます)から取得します。

これは、ユーザーがアプリケーションロケールをOracle JDBCドライバー(mk_MKなど)でサポートされていないロケールに切り替える場合の問題です。この場合、次に接続をフェッチするときに、次の例外が発生します。

 ORA-00604:再帰SQLレベル1でエラーが発生しました
 ORA-12705:NLSデータファイルにアクセスできないか、無効な環境が指定されています

接続を取得する直前にロケールをオンザフライで変更し、ユーザーが選択したロケールに切り替えることができますが、これは不格好で効率が悪いようです。

23
dasp

NLS_LANG設定は、Java.util.Localeから派生します。したがって、接続する前に、次のような呼び出しを行う必要があります。

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

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

私にとって最良の応答は、FoxyBOAがJava app with:

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

私は同じ問題と闘っていましたが、シンjdbc OracleドライバーはNLS_LANGまたはシステムロケールを指定する必要がないことがわかりました。ただし、英語以外のデータベースに接続する場合は、クラスパスにorai18n.jarを含める必要があります。

from Oracle®Database JDBC開発者ガイドおよびリファレンス

グローバリゼーションサポートの提供

基本的なJavaアーカイブ(JAR)ファイルojdbc5.jarおよびojdbc6.jarには、以下の完全なグローバリゼーションサポートを提供するために必要なすべてのクラスが含まれています。

  • Oracleオブジェクトまたはコレクション型のデータメンバーとして取得または挿入されていない、CHAR、VARCHAR、LONGVARCHAR、またはCLOBデータのOracle文字セット。
  • オブジェクトのCHARまたはVARCHARデータメンバー、および文字セットUS7ASCII、WE8DEC、WE8ISO8859P1、WE8MSWIN1252、およびUTF8のコレクション。

オブジェクトまたはコレクションのCHARまたはVARCHARデータメンバーで他の文字セットを使用するには、アプリケーションのCLASSPATH環境変数にorai18n.jarを含める必要があります。

9
Stanislav

Javaを呼び出すと、次のように動作します:

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

国の「en」も ORA-12705 を引き起こす場合。

6
svante

Oracle 10gと完全に互換性があり、認定されている古いOracle 9.2 JDBCドライバーを使用する必要があります。古いドライバーは、ALTER SESSION SET NLS_LANGUAGEコマンドを使用しません。

1
user416472