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宣言内のエンコード指定 getDB2XmlStringISO-10646-UCS-2 getDB2XmlBytes(String targetEncoding)targetEncoding によって指定されるエンコード方式 getDB2XmlAsciiStreamUS-ASCII getDB2XmlCharacterStreamISO-10646-UCS-2 getDB2XmlBinaryStream(String targetEncoding)targetEncoding によって指定されるエンコード方式 INCLUDING XMLDECLARATION を指定した明示的 XMLSERIALIZE 関数の場合、データベース・サーバーはエンコード方式を追加し、JDBC ドライバーはそのエンコード方式を変更しません。 データベース・サーバーが追加する明示エンコード方式は UTF-8 エンコード方式です。 アプリケーションが値を取り出す方法によっては、 データの実際のエンコード方式が明示的な内部エンコード方式と一致しない場合があります。
- アプリケーションが出力データを XML パーサーに送信する場合は、UTF-8、 UCS-2、または UTF-16 エンコード方式で、バイナリー・アプリケーション変数中のデータを取り出す必要があります。