JDBC および SQLJ アプリケーション内の XML データ・エンコード

一般的に、Java™アプリケーションは、 Db2 ODBC や埋め込みSQLアプリケーションよりもXMLエンコーディングの問題が少ない。なぜなら、アプリケーションのコードページは常にUnicodeだからである。

内部エンコードされたXMLデータのエンコードに関する考慮事項は、すべてのアプリケーションで同じですが、Javaアプリケーションにおける外部エンコードデータの場合は状況が単純化されます。

JavaアプリケーションにおけるXMLデータ入力に関する一般的な推奨事項

  • 入力データがファイル内にある場合は、データをバイナリー・ストリームとして読み取り (setBinaryStream)、データベース・マネージャーがそのデータを内部的にエンコードされたデータとして処理できるようにします。
  • 入力データがJavaアプリケーション変数にある場合、アプリケーション変数のタイプによって、 Db2 データベースマネージャが内部エンコードを使用するかどうかを決定します。 データを文字タイプとして入力する場合 (setString など)、データベース・マネージャーは、 データを解析して保管する前に UTF-16 (アプリケーション・コード・ページ) から UTF-8 に変換します。

JavaアプリケーションにおけるXMLデータの出力に関する一般的な推奨事項

  • XML データを非バイナリー・データとしてファイルに出力する場合は、XML 内部エンコード方式を出力データに追加する必要があります。

    ファイル・システムのエンコード方式は Unicode でない可能性もあるので、ストリング・データはファイル中に保管される際に変換される可能性があります。 データをバイナリー・データとしてファイルに書き込む場合には、変換は起こりません。

    Javaアプリケーションの場合、データベースサーバーは暗黙的なXMLシリアライズ操作に対して明示的な宣言を追加しません。 出力データを com.ibm.db2.jcc.DB2Xml タイプとしてキャストし、getDB2Xmlxxx メソッドの 1 つを呼び出す場合は、以下の表のように、JDBC ドライバーはエンコード方式の宣言を追加します。

    getDB2Xmlxxx 宣言内のエンコード指定
    getDB2XmlString ISO-10646-UCS-2
    getDB2XmlBytes(String targetEncoding) targetEncoding によって指定されるエンコード方式
    getDB2XmlAsciiStream US-ASCII
    getDB2XmlCharacterStream ISO-10646-UCS-2
    getDB2XmlBinaryStream(String targetEncoding) targetEncoding によって指定されるエンコード方式

    INCLUDING XMLDECLARATION を指定した明示的 XMLSERIALIZE 関数の場合、データベース・サーバーはエンコード方式を追加し、JDBC ドライバーはそのエンコード方式を変更しません。 データベース・サーバーが追加する明示エンコード方式は UTF-8 エンコード方式です。 アプリケーションが値を取り出す方法によっては、 データの実際のエンコード方式が明示的な内部エンコード方式と一致しない場合があります。

  • アプリケーションが出力データを XML パーサーに送信する場合は、UTF-8、 UCS-2、または UTF-16 エンコード方式で、バイナリー・アプリケーション変数中のデータを取り出す必要があります。