シンOracle JDBCドライバーバージョン10.2.0(ojdbc14.jar)を使用しています。 NLS_LANG設定を手動で構成したいと思います。方法はありますか?
現在、この設定はVM変数user.language(現在のロケールの設定によって自動的に設定されるか、システム環境からの起動時に設定されます)から取得します。
これは、ユーザーがアプリケーションロケールをOracle JDBCドライバー(mk_MKなど)でサポートされていないロケールに切り替える場合の問題です。この場合、次に接続をフェッチするときに、次の例外が発生します。
ORA-00604:再帰SQLレベル1でエラーが発生しました ORA-12705:NLSデータファイルにアクセスできないか、無効な環境が指定されています
接続を取得する直前にロケールをオンザフライで変更し、ユーザーが選択したロケールに切り替えることができますが、これは不格好で効率が悪いようです。
NLS_LANG設定は、Java.util.Localeから派生します。したがって、接続する前に、次のような呼び出しを行う必要があります。
Locale.setDefault(Locale.<your locale here>);
私にとって最良の応答は、FoxyBOAがJava app with:
-Duser.country=en -Duser.language=en
私は同じ問題と闘っていましたが、シン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を含める必要があります。
Oracle 10gと完全に互換性があり、認定されている古いOracle 9.2 JDBCドライバーを使用する必要があります。古いドライバーは、ALTER SESSION SET NLS_LANGUAGEコマンドを使用しません。