IBM Support

[Db2] Java 5 以上にアップグレードすると、Jcc ドライバーが返す DECIMAL 列の結果が変更されることがある

Question & Answer


Question

Java ランライムを 1.4 以下から 1.5 (Java 5) 以上にアップグレードすると、DECIMAL 列の出力結果が変わることがあります。 これはなぜですか、また、元の出力結果に戻すことはできますか。

Cause

Java 5 以降、java.math.BigDecimal クラスの toString メソッドは、指数が必要な場合、科学表記法で BigDecimal の文字列表現を返します。
例えば、Java 1.4 まで 0.0000000004 と返された値は 4E-10 として返されます。

このため、Jcc ドライバーのバージョンにかかわらず、Java ランタイムを 1.5 以降に変更すると、DECIMAL および DECFLOAT 列の文字列での出力結果が変更されることがあります。

Answer

Java 5 以降には、Java 1.4 までと同様の結果を返す toPlainString メソッドが用意されています。
Jcc ドライバーの decimalStringFormat カスタム・プロパティに DECIMAL_STRING_FORMAT_TO_PLAIN_STRING (2) を指定して、toPlainString メソッドを使うよう指示すると、Java 1.4 以前と同様の結果が得られます。

WebSphere Application Server で Jcc ドライバーを利用している場合、以下の手順でカスタム・プロパティーを設定できます。
  1. WebSphere Application Server の管理コンソールを開きます。
  2. データ・ソースの「WebSphere Application Server データ・ソース・プロパティー」パネルに移動します。
    「リソース」>「JDBC」>「データ・ソース」>「(データ・ソース名)」を選択します。
    「WebSphere Application Server データ・ソース・プロパティー」を選択します。
  3. プロパティー decimalStringFormat に数値型の 2 を設定します。

decimalStringFormat プロパティーの詳細は、マニュアルを参照してください。
サポートされるすべてのデータベース製品に共通の IBM Data Server Driver for JDBC and SQLJ のプロパティー

運用上の考慮点
  • DECIMAL および DECFLOAT 値が指数を必要としない場合、Java ランタイムのバージョンによる差異は発生しません。
  • decimalStringFormat プロパティーは V9.7 以降に含まれるすべての Jcc ドライバーで有効ですが、V9.1 は FP8 以降、V9.5 は FP5 以降でのみ有効です。

関連情報
パスポート・アドバンテージによく寄せられる質問
[Db2] Db2がサポートするSDK for Javaのバージョン
[Db2] Db2 が提供している JDBC ドライバーの種類

お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PmVAAU","label":"Programming Interface-\u003EJDBC"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"10.1.0;10.5.0;9.7.0"}]

Document Information

Modified date:
23 August 2023

UID

swg21965364