ヘッダーをスキップ
Oracle Database JDBC開発者ガイド
11gリリース2(11.2)
B56281-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

19 グローバリゼーション・サポート

Oracle Java Database Connectivity(JDBC)ドライバは、グローバリゼーション・サポート(以前のNational Language Support(NLS))を提供しています。グローバリゼーション・サポートにより、Oracleがサポートする任意のキャラクタ・セットで、データの取出しやデータベースへのデータの挿入が可能です。クライアントとサーバーで異なるキャラクタ・セットを使用する場合、ドライバでは、データベース・キャラクタ・セットとクライアント・キャラクタ・セット間の変換がサポートされます。

この章の内容は次のとおりです。


関連項目:



注意:

  • Oracle Database 10g以上では、NLS_LANG変数がJDBCグローバリゼーション・メカニズムに組み込まれていません。JDBCドライバは、NLS環境をチェックしません。そのため、この変数を設定しても効果はありません。

  • JDBCサーバー側内部ドライバは完全なグローバリゼーション・サポートを提供し、グローバリゼーション拡張ファイルを必要としません。

  • JDBC 4.0には各国語キャラクタ・セットの値を読書きするためのメソッドが含まれています。JSE 6以上を使用する場合はこれらのメソッドを使用してください。


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

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

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


注意:

以前のリリースでは、nls_charset12.zipファイルが必要でした。このファイルは現在使用されません。

orai18n.jarの縮小

orai18n.jarファイルには、多数の重要なキャラクタ・セットとグローバリゼーション・サポート・ファイルが含まれています。組込みのカスタマイズ・ツールを使用して、次のようにorai18n.jarファイルのサイズを縮小できます。

java -jar orai18n.jar -custom-charsets-jar [jar/zip_filename] -charset characterset_name [characterset_name ...]

たとえば、キャラクタ・セットJA16SJISおよびJA16EUCを含むカスタムのキャラクタ・セット・ファイルcustom_orai18n_ja.jarを作成する場合は、次のコマンドを発行します。

$ java -jar orai18n.jar -custom-charsets-jar custom_orai18n_ja.jar -charset JA16SJIS JA16EUC

コマンドの出力は次のとおりです。

Added Character set : JA16SJIS
Added Character set : JA16EUC

カスタムのJAR/ZIPファイルにファイル名を指定しない場合、jdbc_orai18n_cs.jarという名前のファイルが現行作業ディレクトリに作成されます。また、カスタムのJAR/ZIPファイルに、orai18nで始まる名前を指定することはできません。

無効またはサポートされていないキャラクタ・セットをコマンドに指定した場合、JAR/ZIPファイルは出力されません。カスタムのJAR/ZIPファイルは更新または削除されません。

カスタムのキャラクタ・セットJAR/ZIPはコマンドを受け入れません。ただし、バージョン情報およびJAR/ZIPファイルの生成に使用されたコマンドは出力されます。たとえば、jdbc_orai18n_cs.zipを設定した場合、情報を表示するコマンドおよび表示される情報は次のようになります。

$ java -jar jdbc_orai18n_cs.jar
Oracle Globalization Development Kit - 11.2.X.X.X Release
This custom character set jar/zip file was created with the following command:
java -jar orai18n.jar -custom-charsets-jar jdbc_orai18n_cs.jar -charset WE8ISO8859P15

指定できるキャラクタ・セットの数は、オペレーティング・システムのシェルまたはコマンド・プロンプトの制限によって決まります。サポートされているキャラクタ・セットはすべてコマンドで指定できます。


注意:

カスタム・キャラクタ・セットを使用する場合、JDBCがカスタム・キャラクタ・セットをサポートするためには、次の操作を実行する必要があります。
  1. カスタム・キャラクタ・セットの作成プロセスで.nltおよび.nlbファイルを作成した後で、次のコマンドを使用して、新たに作成したキャラクタ・セットとlx0boot.nltファイルのために.glbファイルを作成します。

    java -classpath $ORACLE_HOME/jlib/orai18n-tools.jar Ginstall <nlt file>
    
  2. カスタム・キャラクタ・セットを使用してデータベースに接続するJDBCコードを実行する場合は、生成したファイルと$ORACLE_HOME/jlib/orai18n-mappings.jarclasspath環境変数に追加します。

カスタム・キャラクタ・セット作成の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。


JDK 1.5のNCHAR、NVARCHAR2、NCLOBおよびdefaultNCharプロパティ

デフォルトでは、oracle.jdbc.OraclePreparedStatementインタフェースにより、すべての列のデータ型は、列がデータベース・キャラクタ・セットでエンコードされるのと同じように処理されます。ただし、Oracle Database 10g以上では、oracle.jdbc.defaultNCharの値をtrueに設定すると、すべてのキャラクタ列がJDBCにより各国語として処理されます。

defaultNCharのデフォルト値はfalseです。defaultNCharの値がfalseである場合、特に各国語文字が必要な列のために、setFormOfUse(<column_Index>, OraclePreparedStatement.FORM_NCHAR)メソッドをコールする必要があります。たとえば、次のようになります。

PreparedStatement pstmt =
conn.prepareStatement("insert into TEST values(?,?,?)");
pstmt.setFormOfUse(1, OraclePreparedStatement.FORM_NCHAR);
pstmt.setString(1, myUnicodeString1); // NCHAR column
pstmt.setFormOfUse(2, OraclePreparedeStatement.FORM_NCHAR);
pstmt.setString(2, myUnicodeString2); // NVARCHAR2 column

defaultNCharの値をtrueと設定する場合、コマンドラインで次のように指定します。

java -Doracle.jdbc.defaultNChar=true myApplication

必要に応じて、アプリケーションでdefaultNCharを接続プロパティとして指定してNCHARNVARCHAR2またはNCLOBデータにアクセスすることもできます。

Properties props = new Properties();
props.put(OracleConnection.CONNECTION_PROPERTY_DEFAULTNCHAR, "true");
// set URL, username, password, and so on.
...
Connection conn = DriverManager.getConnection(props);

defaultNCharの値がtrueである場合、各国語文字が必要でない列のために、setFormOfUse(<column_Index>, FORM_CHAR)をコールする必要があります。たとえば、次のようになります。

PreparedStatement pstmt =
conn.prepareStatement("insert into TEST values(?,?,?)");
pstmt.setFormOfUse(3, OraclePreparedStatement.FORM_CHAR);
pstmt.setString(3, myString); // CHAR column

注意:

  • 文字データには、必ずoracle.sql.CHARでなくjava.lang.Stringを使用します。CHARは下位互換性のみのために用意されています。

  • setObjectメソッドを使用して各国語キャラクタ・セットにアクセスすることもできますが、setObjectメソッドを使用する場合、ターゲット・データ型をTypes.NCHARTypes.NCLOBTypes.NVARCHARまたはTypes.LONGNVARCHARとして設定する必要があります。



注意:

Oracle Databaseでは、SQL文字列はデータベース・キャラクタ・セットに変換されます。そのため、次のことを覚えておく必要があります。
  • Oracle Database 10gリリース1(10.1)以前のリリースでは、JDBCドライバは、データベース・キャラクタ・セットで表示できないUnicode文字を含むNCHARリテラル(n'...')をサポートしていません。データベース・キャラクタ・セットで表示できないUnicode文字はすべて破損します。

  • Oracle Database 10gリリース2(10.2)のJDBCドライバがOracle Database 10gリリース2(10.2)のデータベース・サーバーに接続されている場合、NCHARリテラル(n'...')はすべてUnicodeリテラル(u'...')に変換され、ASCII以外の文字はすべて対応するUnicodeエスケープ・シーケンスに変換されます。この変換は、データ破損を防ぐために自動的に実行されます。

  • Oracle Database 10gリリース2(10.2)のJDBCドライバがOracle Database 10gリリース1(10.1)以前のデータベース・サーバーに接続されている場合、NCHARリテラル(n'...')は変換されないため、データベース・キャラクタ・セットで表示できない文字はすべて破損します。


JDK 1.6での各国語キャラクタ・セット用の新しいメソッド

JDBC 4.0では、各国語キャラクタ・セット型にアクセスするために、次の4つの追加SQL型のサポートが導入されています。

これらの型は、各国語キャラクタ・セットを使用して値がエンコードされる点を除き、CHARVARCHARLONGVARCHARおよびCLOB型に類似しています。JDBCの仕様では、Stringクラスを使用してNCHARNVARCHARおよびLONGNVARCHARデータを表し、NClobクラスを使用してNCLOB値を表します。

各国語の文字値を取得するには、アプリケーションから次のいずれかのメソッドをコールします。

各国語キャラクタ・タイプのパラメータ・マーカーの値を指定するには、アプリケーションから次のいずれかのメソッドをコールします。


注意:

setFormOfUseメソッドを使用して、JDK 1.6の各国語キャラクタ値を指定できます。しかし、このメソッドは今後のリリースで非推奨になるため、利用はお薦めしません。この項で説明したメソッドを使用することをお薦めします。


ヒント:

setObjectメソッドが使用される場合、ターゲット・データ型をTypes.NCHARTypes.NCLOBTypes.NVARCHARまたはTypes.LONGNVARCHARとして設定する必要があります。