WebLogic Type 4 JDBC ドライバ ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

DB2 ドライバ

以下の節では、DB2 用の BEA WebLogic Type 4 JDBC ドライバのコンフィグレーション方法と使用方法について説明します。

 


データベース バージョンのサポート

DB2 用の BEA WebLogic Type 4 JDBC ドライバ (「DB2 ドライバ」) は次のバージョンをサポートします。

注意 : このドキュメントでは、DB2 の各バージョンを以下のように表記します。

 


DB2 ドライバ クラス

BEA WebLogic Type 4 JDBC DB2 ドライバのドライバ クラスは次のとおりです。

   XA : weblogic.jdbcx.db2.DB2DataSource
   非 XA : weblogic.jdbc.db2.DB2Driver

WebLogic Server ドメインに JDBC データ ソースをコンフィグレーションする場合に、これらのドライバ クラスを使用します。

 


DB2 URL

DB2 データベースに接続するには、以下の適切な形式の URL を使用します。

 


DB2 接続プロパティ

表 3-1 では、DB2 ドライバでサポートされる JDBC 接続プロパティを示し、各プロパティについて説明します。WebLogic Server ドメインの JDBC データ ソースのコンフィグレーションでこれらの接続プロパティを使用できます。

注意 : すべての接続プロパティ名で大文字と小文字は区別されません。たとえば、Password は password と同じです。必須のプロパティかどうかが記載されています。各接続プロパティで示されているデータ型は、JDBC データ ソースのプロパティ値に使用される Java データ型です。

プロパティを指定するには、JDBC データ ソースのコンフィグレーションで次の形式を使用します。

   property=value

表 3-1 DB2 接続プロパティ
プロパティ
説明
AddToCreateTable
省略可能
すべての Create Table 文に自動的に追加される文字列。このフィールドは主に「in database」句を追加する必要のあるユーザ用。
AllowImplicitResultSetCloseForXA
省略可能
true または false。DB2 には、結果セットのすべての行がフェッチされたときに結果セットを自動的に閉じるメカニズムがある。このメカニズムによりデータベースへのラウンド トリップ数が減少するため、アプリケーションのパフォーマンス向上が実現されている。WebLogic DB2 ドライバは、デフォルトでこのメカニズムを使用している。

注意 : このメカニズムには問題があることが確認されている。問題を回避するには、データ ソースのコンフィグレーションのプロパティに AllowImplicitResultSetCloseForXA=false を追加する必要がある。

デフォルトは true。
AlternateID
省略可能
修飾されていない SQL 識別子によって使用されるデフォルトの DB2 スキーマを、指定された値に設定する。値は有効な DB2 スキーマでなければならない。
BatchPerformanceWorkaround
省略可能
true または false。DB2 UDB 8.1 では、ネイティブの DB2 バッチ メカニズムが使用される。このプロパティは、データ変換を容易にするために特定の制限を行うかどうかを決定する。
  • false に設定すると、PreparedStatement を使って実行されるバッチ処理のパラメータ値の設定に使用するメソッドは、パラメータが関連付けられるカラムのデータベース データ型に一致する必要がある。これは、DB2 サーバが暗黙的なデータ変換を実行しないため。
  • true に設定すると、この制限は削除される。ただし、パラメータの設定は指定された順序で実行されない場合がある。
デフォルトは false。

注意 : DB2 用の WebLogic Type 4 JDBC ドライバを使用し、JMS JDBC ストアとして使用されるデータ ソースの場合は、BatchPerformanceWorkaround プロパティを true に設定する必要がある。

CatalogIncludesSynonyms
省略可能
true または false。true に設定すると、DatabaseMetaData メソッドの getColumns、getProcedureColumns、および getIndexInfo から返される結果セットにシノニムが含まれる。false に設定すると、結果セットではシノニムが省略される。
デフォルトは true。
CatalogSchema
省略可能
カタログ関数に使用する DB2 スキーマ。値は有効な DB2 スキーマの名前でなければならない。
デフォルトは、DB2 UDB では SYSCAT、DB2 OS/390 では SYSIBM、DB2 iSeries では QSYS2。
パフォーマンスを向上させるため、システム カタログ テーブルのビューをデフォルト カタログ スキーマ以外のスキーマで作成できる。このプロパティにカタログ テーブルのビューを含むスキーマを指定すると、ドライバでそれらのビューを使用できる。カタログ メソッドを正しく機能させるには、特定のカタログ テーブルのビューが指定したスキーマに存在している必要がある。必要となるビューは、使用している DB2 データベースによって異なる。必要となるカタログ テーブルのビューについては、「カタログ メソッドに対するデフォルト以外のスキーマの使用」を参照。
CharsetFor65535
省略可能
CCSID 65535 で定義されている文字カラム (Char、Varchar、Longvarchar、Char for Bit Data、Varchar for Bit Data、Longvarchar for Bit Data) にビット データとして格納されている文字データの変換に使用するコード ページ。CCSID 65535 で定義されているカラムを使用してデータベースから取得したビット データとして格納されているすべての文字データは、指定したコード ページを使用して変換される。値としては、使用している Java 仮想マシンでサポートされている有効なコード ページの名前 (たとえば CharsetFor65535=CP950) を含む文字列を指定する必要がある。CCSID 65535 で定義されている文字カラムにデータを書き込む際は、このプロパティはまったく影響しない。
CodePageOverride
省略可能
文字データと Clob データの変換に使用するコード ページ。指定したコード ページによって、デフォルトのデータベース コード ページがオーバーライドされる。データベースとやり取り (取得および書き込み) するすべての文字データおよび Clob データは、指定したコード ページを使用して変換される。値としては、使用している Java 仮想マシンでサポートされている有効なコード ページの名前 (たとえば CodePageOverride=CP950) を含む文字列を指定する必要がある。
CollectionId
省略可能
パッケージがバインドされるコレクション (パッケージのグループ)。
このプロパティは DB2 UDB の場合は無視される。
デフォルトは NULLID。
ConnectionRetryCount
省略可能
正常な接続が確立されるまでに、ドライバで接続が再試行される回数。有効な値は、0 または正の整数。
0 に設定すると、最初に接続を作成しようとしたときに正常な接続が確立されなかった場合にも、接続は再試行されない。
デフォルトは 0。
ConnectionRetryDelay
省略可能
ConnectionRetryCount が正の整数に設定されている場合に、ドライバがそれぞれの接続の再試行の間に待機する秒数。
デフォルトは 3。
CreateDefaultPackage
省略可能
true または false。デフォルト パッケージを作成するかどうかを指定する。DB2 OS/390 および DB2 iSeries の場合、パッケージは CollectionId プロパティで指定されたコレクション内に作成される。パッケージがまだ存在しない場合はこれが使用される。
DB2 パッケージの作成の詳細については、「DB2 パッケージの作成」を参照。
デフォルトは false。
DatabaseName
接続先のデータベースの名前 (UDB で使用される)。
DynamicSections
省略可能
DB2 ドライバ パッケージが単一のユーザに対して準備できる文の数を指定する。
デフォルトは 200。
Grantee
省略可能
DB2 パッケージの EXECUTE 特権を付与するスキーマの名前を指定する。GrantExecute プロパティが false に設定されている場合、このプロパティは無視される。
DB2 パッケージの作成の詳細については、「DB2 パッケージの作成」を参照。
デフォルトは PUBLIC。
GrantExecute
省略可能
true または false。DB2 パッケージの EXECUTE 特権を、DB2 パッケージの作成に使用したスキーマ以外のスキーマに付与するかどうかを指定する。true に設定すると、Grantee プロパティに指定したスキーマに EXECUTE 特権が付与される。false に設定すると、EXECUTE 特権は他のスキーマには付与されない。
DB2 パッケージの作成の詳細については、「DB2 パッケージの作成」を参照。
デフォルトは true。
InsensitiveResultSetBufferSize
-1、0、または x。ドライバがインセンシティブな結果セット データのキャッシュに使用するメモリの量を指定する。以下のいずれかの値を指定する必要がある。
-1 に設定すると、ドライバはすべてのインセンシティブな結果セット データをメモリにキャッシュする。結果セットのサイズが利用できるメモリ容量を超えると、OutOfMemoryException 例外が生成される。結果セット データをディスクに書き込む必要がないため、データがより効率的に処理される。
0 に設定すると、ドライバは 2GB を限度としてすべてのインセンシティブな結果セット データをメモリにキャッシュする。結果セット データのサイズが利用できるメモリ容量を超えると、その結果セット データがディスクにページングされる。結果セット データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがある。
x (正の整数) に設定すると、インセンシティブな結果セット データのキャッシュに使用するメモリ バッファのサイズ (KB 単位) を指定したことになる。結果セットのサイズがバッファ サイズを超えると、結果セットがディスクにページングされる。結果セット データがディスクに書き込まれる可能性があるため、ディスクに正しく書き込むためにデータの再フォーマットが必要になることがある。バッファ サイズとして 2 の累乗を指定すると、メモリの使用がより効率的になる。
デフォルトは 2048 (KB)。
LocationName
アクセスする DB2 ロケーションの名前 (OS/390 および iSeries で使用される)。
LoginTimeout
省略可能
データベース接続の作成の試行を待機する最大時間 (秒単位)。値 0 は、デフォルトのシステム タイムアウトがある場合はそのタイムアウトを使用し、それ以外の場合はタイムアウトがないことを指定する。
PackageOwner
省略可能
DB2 パッケージのオーナーを指定する。
DB2 パッケージの作成の詳細については、「DB2 パッケージの作成」を参照。
デフォルトは NULL。
Password
DB2 データベースに接続する場合に使用するパスワード。大文字と小文字を区別する。パスワードは、データベースでセキュリティが有効化されている場合にのみ必要となる。その場合は、システム管理者に連絡してパスワードを取得する。
PortNumber
省略可能
データベース サーバが接続をリスンする TCP ポート。デフォルトは 50000。
ReplacePackage
省略可能
true または false。現在のバインド プロセスで既存の DB2 パッケージを置き換えるかどうかを指定する。DB2 UDB では、このプロパティは CreateDefaultPackage と一緒に使用する必要がある。
DB2 パッケージの作成の詳細については、「DB2 パッケージの作成」を参照。
デフォルトは false。
SecurityMechanism
省略可能
ClearText、EncryptedPassword、または EncryptedUIDPassword。ドライバが接続を確立する際に、DB2 サーバへのユーザの認証に使用するセキュリティ メソッドを指定する。DB2 サーバでサポートされていない指定した認証方式を指定すると、接続に失敗して例外が生成される。
ClearText に設定すると、ドライバは認証用のパスワードをクリア テキストで DB2 サーバに送信する。
EncryptedPassword に設定すると、ドライバは暗号化されたパスワードを認証用に DB2 サーバに送信する。
EncryptedUIDPassword に設定すると、ドライバは暗号化されたユーザ ID とパスワードを認証用に DB2 サーバに送信する。
デフォルトは ClearText。
JDK 1.4 以降が必要。
SendStreamAsBlob
省略可能
true または false。32K バイト未満のバイナリ ストリーム データを、Long Varchar for Bit Data または Blob データとしてデータベースに送信するかどうかを指定する。32K バイト未満のバイナリ ストリーム データは、最大長が 32K バイトの Long Varchar for Bit Data カラムか、Blob カラムに挿入できる。32K バイトを超えるバイナリ ストリームは Blob カラムにしか挿入できない。ドライバは、32K バイトを超えるバイナリ ストリーム データは常に Blob データとしてデータベースに送信する。
true に設定すると、ドライバは 32K バイト未満のバイナリ ストリーム データを Blob データとしてデータベースに送信する。ターゲット カラムが Blob カラムでなく Long Varchar for Bit Data カラムである場合は、Insert 文または Update 文が失敗する。ドライバに渡されたストリームがリセット可能な場合は、Insert 文または Update 文が自動的に再試行され、データが Long Varchar for Bit Data として送信される。Insert カラムまたは Update カラムが Blob カラムである場合、32K バイト未満のバイナリ ストリーム データを最初から Blob として送信するとパフォーマンスが大幅に向上する。
false に設定すると、ドライバは 32K バイト未満のバイナリ ストリーム データを Long Varchar for Bit Data データとしてデータベースに送信する。ターゲット カラムが Long Varchar for Bit Data カラムでなく Blob カラムである場合は、Insert 文または Update 文が失敗する。ドライバは、Insert 文または Update 文を再試行してデータを Blob データとして送信する。
デフォルトは false。
ServerName
データベース サーバの名前または IP アドレス。
StripNewlines
省略可能
true または false。SQL 文の改行文字を DB2 サーバに送信するかどうかを指定する。StripNewlines=true の場合、DB2 ドライバは SQL 文からすべての改行文字を削除する。
デフォルトは true。
UseCurrentSchema
省略可能
true または false。スキーマが指定されていないか、スキーマとしてワイルドカード文字 % が指定されている状態で DatabaseMetaData.getTables 呼び出しが行われた場合に、結果を現在のスキーマのテーブルに制限するかどうかを指定する。結果を現在のスキーマのテーブルに制限することで、スキーマが指定されていない getTables メソッドの呼び出しのパフォーマンスが向上する。
true に設定すると、getTables メソッドから返される結果は現在のスキーマのテーブルに制限される。false に設定すると、getTables メソッドの結果は制限されない。
デフォルトは false。
User
DB2 データベースに接続する場合に使用するユーザ名。大文字と小文字を区別する。
WithHoldCursors
省略可能
true または false。コミット時ににカーソルを開いたままにするかどうかを指定する。DB2 は、コミット後にオープン カーソルをすべて閉じる (Delete) か、または開いたままにする (Preserve)。true に設定すると、カーソルの動作は Preserve になる。false に設定すると、カーソルの動作は Delete になる。トランザクションのロールバック時には、このプロパティの設定にかかわらずすべてのカーソルが閉じられる。
デフォルトは true。

 


パフォーマンスに関する考慮事項

以下に示す DB2 ドライバの接続プロパティを設定すると、アプリケーションのパフォーマンスを向上させることができます。

CatalogIncludesSynonyms

DatabaseMetaData.getColumns メソッドは、テーブルに関連付けられたシノニムやエリアスなど、テーブルに関する特性を判別するためによく使用されます。アプリケーションが Linux/UNIX/Windows 上の DB2 v7.1 または v7.2、z/OS 上の DB2、または iSeries 上の DB2 にアクセスしていて、データベース テーブルのシノニムを使用していない場合は、この情報を無視することでパフォーマンスを向上させることができます。Linux/UNIX/Windows 上の DB2 v8.1 および v8.2 にアクセスしている場合は、ドライバは DatabaseMetaData.getColumns() メソッドに対して常にシノニムを返します。

CatalogSchema

パフォーマンスを向上させるため、システム カタログ テーブルのビューをデフォルト以外のカタログ スキーマで作成できます。このプロパティが、ビューを含むスキーマの名前に設定されている場合、DB2 ドライバはカタログ テーブルのビューにアクセスできます。デフォルトのカタログ スキーマは、Linux/UNIX/Windows 上の DB2 の場合は SYSCAT、z/OS 上の DB2 の場合は SYSIBM、iSeries 上の DB2 の場合は QSYS2 です。

カタログ メソッドを正しく機能させるには、特定のカタログ テーブルのビューが指定したスキーマに存在している必要があります。必要となるビューは、使用している DB2 データベースによって異なります。指定されたスキーマに存在している必要があるカタログ テーブルのビューの詳細については、「カタログ メソッドに対するデフォルト以外のスキーマの使用」を参照してください。

InsensitiveResultSetBufferSize

スクロールインセンシティブな結果セットを使用する場合のパフォーマンスを向上させるため、ドライバは結果セット データをディスクに書き込む代わりに、メモリにキャッシュできます。デフォルトでは、ドライバはインセンシティブな結果セット データを 2 MB までメモリにキャッシュし、残りの結果セット データをディスクに書き込みます。パフォーマンスを向上させるには、ドライバがデータをディスクに書き込む前に使用するメモリの量を増やすか、ドライバがインセンシティブな結果セット データをディスクに書き込めないようにします。最大キャッシュ サイズの設定は 2 GB です。

MaxPooledStatements

ドライバがアプリケーション サーバの内部で実行されない場合、または独自のプリペアド ステートメント プールを提供しない別のアプリケーションの内部で実行されるのでない場合は、パフォーマンスを向上させるため、ドライバ独自の内部的なプリペアド ステートメント プールを有効にする必要があります。ドライバの内部的なプリペアド ステートメント プールを有効にすると、ドライバはアプリケーションによって作成された一定数のプリペアド ステートメントをキャッシュします。たとえば、MaxPooledStatements が 20 に設定されている場合、ドライバはアプリケーションによって作成された最近の 20 個のプリペアド ステートメントをキャッシュします。このプロパティの値に設定された値が、アプリケーションが使用するプリペアド ステートメントの数より大きい場合は、すべてのプリペアド ステートメントがキャッシュされます。

ResultSetMetaDataOptions

デフォルトでは、ResultSetMetaData.getTableName() メソッドが呼び出された場合、DB2 ドライバは、結果セット内の各カラムの正しいテーブル名を返すために必要な追加の処理を省略します。このため、getTableName() メソッドは結果セット内のカラムごとに空の文字列を返す可能性があります。アプリケーションでテーブル名情報が必要ない場合は、この設定によって最適なパフォーマンスが得られます。

ResultSet メタデータを返す方法の詳細については、「ResultSet メタデータのサポート」を参照してください。

SendStreamAsBlob

挿入または更新する大きなバイナリ オブジェクトが Blob として格納される場合は、バイナリ ストリームを Blob データとして送信すると、パフォーマンスを向上させることができます。その場合、このプロパティは true に設定してください。

StripNewLines

アプリケーションで使用される SQL 文に改行文字が含まれていないことがわかっている場合は、改行文字の削除に必要な解析を省略することで、ドライバのパフォーマンスを向上させることができます。その場合は、StripNewlines プロパティを false に設定してください。

UseCurrentSchema

アプリケーションが現在のユーザのみに所有されているテーブルおよびビューにアクセスする必要がある場合は、このプロパティを true に設定することでアプリケーションのパフォーマンスを向上させることができます。このプロパティを true に設定した場合、getTables() および getColumns() メソッドを実行すると、ドライバは現在のユーザのみに所有されているテーブルおよびビューを返します。このプロパティを true に設定することは、getTables() または getColumns() の呼び出しの schemaPattern 引数として、接続で使用されているユーザ ID を渡すことと同じになります。

 


AS/400 上での locationName の設定

AS/400 上で動作する DB2 データベースに接続する場合、locationName プロパティを設定する必要があります。

  1. AS/400 上で WRKRDBDIRE コマンドを実行して、「Relational Database」の値を取得します。
  2. 次のような出力が表示されます。

       ,Relational,,Remote,Option,,Database,,Location,,Text,
       ,          ,,      ,      ,,S10B757B,,*LOCAL  ,,    ,
  3. Java クライアントに、DB2 接続プロパティ「user」および「password」を指定した Properties オブジェクトを設定します (「DB2 接続プロパティ」を参照)。
  4. Driver.connect() に、パラメータとして次の文字列と Properties オブジェクトを指定します。
  5.    jdbc:bea:db2://<Host>:<Port>;LocationName=RelationalDatabaseName

    この例では、RelationalDatabaseNameWRKRDBDIRE コマンドを実行した結果として取得された Database の値です。

以下に Java クライアントの一部を示します。

   ...
   Properties props = new Properties();
   props.put("user",     user);
   props.put("password", password);
   ...
   myDriver = (Driver)Class.forName("weblogic.jdbc.db2.DB2Driver").newInstance();
   conn = myDriver.connect("jdbc:bea:db2://10.1.4.1:446;LocationName=S10B757B", props);
   stmt = conn.createStatement();
   stmt.execute("select * from MYDATABASE.MYTABLE");
   rs = stmt.getResultSet();
   ...

 


DB2 パッケージの作成

DB2 パッケージは、プログラムの準備中に生成され、SQL 文の実行に使用される DB2 サーバ上の制御構造です。DB2 ドライバは接続時に必要なすべての DB2 パッケージを自動的に作成します。パッケージがすでに存在する場合、ドライバは既存のパッケージを使用して接続を確立します。

注意 : 接続用に作成する必要のあるパッケージの数やサイズによっては、初期接続に 2、3 分かかる場合があります。以降の接続ではこの遅延は発生しません。

デフォルトでは、DB2 ドライバによって作成される DB2 パッケージには 200 の動的セクションが含まれており、NULLID コレクション (またはライブラリ) の中に作成されます。ほとんどの場合、DB2 ドライバが接続時に自動的に作成するため、DB2 パッケージを作成する必要はありません。必要な場合は、次のいずれかの方法で DB2 パッケージを作成できます。

注意 : ユーザ ID にデータベースに対する CREATE PACKAGE 特権がなければなりません。ない場合は、データベース管理者が代わりにパッケージを作成する必要があります。
注意 : JDBC データ ソースのコンフィグレーションに示されたユーザ ID はパッケージのオーナーでなければなりません。
注意 : DB2 パッケージを作成する際のユーザ ID には、データベースに対する BINDADD 特権が付与されている必要があります。適切な特権が付与されているかどうか不明な場合は、データベース管理者に問い合わせてください。

dbping を使用して DB2 パッケージを作成する

WebLogic Type 4 JDBC DB2 ドライバで DB2 サーバ上にパッケージを作成するには、WebLogic Server dbping ユーティリティを使用できます。dbping ユーティリティは、JDBC ドライバを介したクライアント マシンおよび DBMS 間の接続のテストに使用されます。WebLogic Type 4 JDBC DB2 ドライバは DB2 パッケージがまだ存在しない場合は自動的に作成するため、このユーティリティを実行すると DB2 サーバ上にデフォルトの DB2 パッケージが作成されます。

dbping ユーティリティを使用した DB2 パッケージの作成の詳細については、「dbping を使用して DB2 パッケージを作成する」を参照してください。

接続プロパティを使用した DB2 パッケージの作成

初期接続 URL 内に特定の接続プロパティを設定すると、DB2 パッケージを自動的に作成できます。表 3-2 に、DB2 パッケージを作成する場合に初期接続 URL で使用する接続プロパティを示します。

注意 : WebLogic Server JDBC データ ソースでは、データ ソースのすべての接続が同じ URL と接続プロパティを使用するため、この方法の使用はお勧めしません。複数の接続を持つ JDBC データ ソースを作成すると、データベース接続が作成されるたびにパッケージが再作成されます。

表 3-2 DB2 パッケージを作成する場合の初期接続 URL の接続プロパティ
プロパティ
データベース
PackageCollection=collection_name
(collection_name は DB2 パッケージをバインドするコレクションまたはライブラリの名前)
z/OS および iSeries 上の DB2
CreateDefaultPackage=true
Linux/UNIX/Windows、z/OS、および iSeries 上の DB2
ReplacePackage=true
Linux/UNIX/Windows 上の DB2
DynamicSections=x
(x は正の整数)
Linux/UNIX/Windows、z/OS、および iSeries 上の DB2

CreateDefaultPackage=TRUE を使用するとデフォルトの名前のパッケージが作成されます。CreateDefaultPackage=TRUE を使用して、CollectionId を指定しない場合、NULLID CollectionId が作成されます。

注意 : Linux/UNIX/Windows 上の DB2 で新しい DB2 パッケージを作成するには、ReplacePackage=trueCreateDefaultPackage=true と一緒に使用する必要があります。DB2 パッケージがすでに存在する場合は、ReplacePackage=true の場合にそのパッケージは置き換えられます。

Linux/UNIX/Windows 上の DB2 の例

次の URL では、400 の動的セクションを持つ DB2 パッケージが作成されます。DB2 パッケージがすでに存在している場合は、新しく作成したパッケージで置き換えられます。

   jdbc:bea:db2://server1:50000;DatabaseName=SAMPLE;
   CreateDefaultPackage=TRUE;ReplacePackage=TRUE;DynamicSections=400

z/OS および iSeries 上の DB2 の例

次の URL では、400 の動的セクションを持つ DB2 パッケージが作成されます。

   jdbc:bea:db2://server1:50000;LocationName=SAMPLE;
   CreateDefaultPackage=TRUE;DynamicSections=400

DB2 パッケージで動的セクションを増やす場合の注意

動的セクションは実在する実行可能オブジェクトで、動的 SQL リクエストに応答するために必要なロジックが含まれています。これらのセクションは、ハンドルやプリペアド ステートメント、およびそれに関連付けられた結果セットで使用します。

場合によっては、デフォルトの数 (200) より多くの動的セクションを持つ DB2 パッケージを作成する必要があります。アプリケーションで多数の動的セクションを持つ DB2 パッケージが必要な場合は、次の情報を考慮してください。

 


データ型

表 3-3 に、DB2 ドライバでサポートされるデータ型と、それらが JDBC データ型へどのようにマップされるかを示します。

表 3-3 DB2 データ型
DB2 データ型
JDBC のデータ型
Bigint1
BIGINT
Blob2
BLOB
Char
CHAR
Char for Bit Data
BINARY
Clob
CLOB
Date
DATE
DBClob3
CLOB
Decimal
DECIMAL
Double
DOUBLE
Float
FLOAT
Integer
INTEGER
Long Varchar
LONGVARCHAR
Long Varchar for Bit Data
LONGVARBINARY
Numeric
NUMERIC
Real
REAL
Rowid4
VARBINARY
Smallint
SMALLINT
Time
TIME
Timestamp
TIMESTAMP
Varchar
VARCHAR
Varchar for Bit Data
VARBINARY

1Linux/UNIX/Windows 上の DB2 v8.1 および v8.2 でのみサポートされる。

2Linux/UNIX/Windows 上の DB2 v8.1 および v8.2、z/OS 上の DB2、および iSeries 上の DB2 V5R2 および V5R3 でのみサポートされる (「Large Object (LOB) のサポート」を参照)。

3Linux/UNIX/Windows 上の DB2 v8.1 および v8.2、z/OS 上の DB2 7.x、v8.1、および v8.2、および iSeries 上の DB2 V5R2 および V5R3 でのみサポートされる (「Large Object (LOB) のサポート」を参照)。

4z/OS 上の DB2、および iSeries 上の DB2 V5R2 および V5R3 でのみサポートされる

データ型の詳細については、「getTypeInfo」を参照してください。

 


カタログ メソッドに対するデフォルト以外のスキーマの使用

CatalogSchema プロパティがデフォルト以外のスキーマに設定されている場合に、カタログ メソッドが適切に機能するためには、表 3-4 に示すカタログ テーブルのビューが、指定されたスキーマに存在している必要があります。必要となるビューは、使用している DB2 データベースによって異なります。

表 3-4 DB2 のカタログ テーブル
データベース
カタログ テーブル
Linux/UNIX/Windows 上の DB2
SYSCAT.TABLES
SYSCAT.COLUMNS
SYSCAT.PROCEDURES
SYSCAT.PROCPARAMS
SYSCAT.COLAUTH
SYSCAT.TABAUTH
SYSCAT.KEYCOLUSE
SYSCAT.INDEXES
SYSCAT.INDEXCOLUSE
SYSCAT.REFERENCES
SYSCAT.SYSSCHEMATA
SYSCAT.TYPEMAPPINGS
SYSCAT.DBAUTH
z/OS 上の DB2
SYSIBM.SYSTABCONST
SYSIBM.SYSTABLES
SYSIBM.SYSSYNONYMS
SYSIBM.SYSCOLUMNS
SYSIBM.SYSPROCEDURES
SYSIBM.SYSROUTINES
SYSIBM.SYSPARMS
SYSIBM.SYSCOLAUTH
SYSIBM.SYSTABAUTH
SYSIBM.SYSKEYS
SYSIBM.SYSINDEXES
SYSIBM.SYSRELS
SYSIBM.SYSFOREIGNKEYS
SYSIBM.SYSSCHEMAAUTH
SYSIBM.SYSDBAUTH
iSeries 上の DB2
QSYS2.SYSCST
QSYS2.SYSKEYCST
QSYS2.SYSPROCS
QSYS2.SYSPARMS
QSYS2.SYSTABLES
QSYS2.SYSSYNONYMS
QSYS2.SYSCOLUMNS
QSYS2.SQLTABLEPRIVILEGES
QSYS2.SYSKEYS
QSYS2.SYSINDEXES
QSYS2.SYSREFCST

 


SQL エスケープ シーケンス

DB2 ドライバでサポートされている SQL エスケープ シーケンスについては、「JDBC の SQL エスケープ シーケンス」を参照してください。

 


アイソレーション レベル

DB2 ドライバでサポートされるアイソレーション レベルを表 3-5 に示します。JDBC アイソレーション レベルは、表に示す適切な DB2 トランザクション アイソレーション レベルにマップされています。デフォルトのアイソレーション レベルは Read Committed です。

表 3-5 サポートされるアイソレーション レベル
JDBC アイソレーション レベル
DB2 アイソレーション レベル
なし
No Commit1
Read Committed
Cursor Stability
Read Uncommitted
Uncommitted Read
Repeatable Read
Read Stability
Serializable
Repeatable Read

1ジャーナリングが有効になっていない DB2 iSeries バージョン用にサポートされている。

 


スクロール可能なカーソルの使用

DB2 ドライバは、スクロールインセンシティブな結果セット、および更新可能な結果セットをサポートしています。

注意 : DB2 ドライバが、要求された結果セットのタイプまたは同時実行性をサポートできない場合は、カーソルを自動的にダウングレードして詳細情報の入った SQLWarning を生成します。

 


JTA のサポート

DB2 ドライバで JTA を介して分散トランザクションを使用するには、Linux/UNIX/Windows 上の DB2 v8.1 または v8.2 が必要です。

 


Large Object (LOB) のサポート

Blob の取得および更新は、DB2 ドライバと以下のデータベースでサポートされます。

Clob の取得および更新は、DB2 ドライバとサポート対象のすべての DB2 データベースでサポートされます。DB2 ドライバは以下の DB2 データベースで、最大 2 GB の Clob をサポートします。

上記以外のサポート対象の DB2 データベースの場合、DB2 ドライバは最大 32KB の Clob の取得および更新をサポートします。

DBClob の取得および更新は、DB2 ドライバと以下のデータベースでサポートされます。

 


バッチ挿入およびバッチ更新に関するパフォーマンスの回避策

Linux/UNIX/Windows 上の DB2 v8.1 および v8.2、z/OS 上の DB2、および iSeries 上の DB2 において、DB2 ドライバは DB2 のネイティブ バッチ メカニズムを使用します。デフォルトでは、PreparedStatement を使用して実行されるバッチ処理のパラメータ値を設定するのに使用するメソッドは、パラメータが関連付けられるカラムのデータベース データ型に一致する必要があります。

DB2 サーバでは暗黙的なデータ変換を実行しないため、カラムのデータ型に一致しないパラメータ値を指定すると、DB2 サーバはエラーを生成します。たとえば、ストリームまたは配列の長さが 32KB 未満の場合にそのストリームまたはバイト配列を使用して Blob パラメータの値を設定するには、setObject() メソッドを使用し、対象の JDBC 型を BLOB として指定する必要があります。setBinaryStream() または setBytes() メソッドは使用できません。

メソッド タイプの制限を削除するには、BatchPerformanceWorkaround プロパティを true に設定します。たとえば、setBinaryStream() または setBytes() メソッドを使用すると、ストリームや配列の長さに関係なく Blob パラメータの値を設定できます。ただし、パラメータの設定は指定された順序で実行されない場合もあります。

注意 : Administration Console でデータ ソースを作成する場合、Administration Console では BatchPeformanceWorkaround 接続プロパティが、デフォルトで true に設定されます。
注意 : DB2 用の WebLogic Type 4 JDBC ドライバを使用し、JMS JDBC ストアとして使用されるデータ ソースの場合は、BatchPerformanceWorkaround プロパティを true に設定する必要がある。

 


パラメータ メタデータのサポート

DB2 ドライバでは、この節で説明するようにパラメータ メタデータを返すことができます。

Insert 文および Update 文

DB2 ドライバは、以下の DB2 データベースで、あらゆるタイプの SQL 文のパラメータ メタデータを返すことができます。

これ以外にサポートされる DB2 データベースの場合、DB2 ドライバは、以下の形式の Insert 文および Update 文のパラメータ メタデータを返すことができます。

ここで、operator は SQL 演算子 (=、<、>、<=、>=、または <>) です。

Select 文

DB2 ドライバは、以下の DB2 データベースで、あらゆるタイプの SQL 文のパラメータ メタデータを返すことができます。

これ以外にサポートされる DB2 データベースの場合、DB2 ドライバは、ANSI SQL 92 エントリレベルの述語 (比較、BETWEEN、IN、LIKE、EXISTS などの述語構文) にパラメータを含んでいる Select 文に対してパラメータ メタデータを返すことができます。詳細な構文については、ANSI SQL リファレンスを参照してください。

以下のいずれかの条件に該当する場合は、Select 文に対してパラメータ メタデータを返すことができます。

以下の Select 文では、パラメータ メタデータを返すことができる例をさらに示しています。

   SELECT col1, col2 FROM foo WHERE col1 = ? and col2 > ?
   SELECT ... WHERE colname = (SELECT col2 FROM t2  
      WHERE col3 = ?)
   SELECT ... WHERE colname LIKE ?
   SELECT ... WHERE colname BETWEEN ? and ?
   SELECT ... WHERE colname IN (?, ?, ?)
   SELECT ... WHERE EXISTS(SELECT ... FROM T2 WHERE col1 < ?)

GROUP BY、HAVING、または ORDER BY を含む WHERE 句で ANSI SQL 92 エントリレベルの述語を使用する文がサポートされます。次に例を示します。

   SELECT * FROM t1 WHERE col = ?ORDER BY 1

結合がサポートされます。次に例を示します。

   SELECT * FROM t1,t2 WHERE t1.col1 = ?

完全修飾名とエリアスがサポートされます。次に例を示します。

   SELECT a, b, c, d FROM T1 AS A, T2 AS B WHERE A.a = ?
      and B.b = ?"

 


ResultSet メタデータのサポート

アプリケーションでテーブル名情報が必要な場合、DB2 ドライバは Select 文の ResultSet メタデータに含めてテーブル名情報を返すことができます。ResultSetMetaDataOptions プロパティを 1 に設定した場合、ResultSetMetaData.getTableName() メソッドが呼び出されたとき、DB2 ドライバは結果セット内の各カラムの正しいテーブル名を決定する追加の処理を実行します。それ以外の場合、getTableName() メソッドは結果セット内のカラムごとに空の文字列を返す可能性があります。

DB2 ドライバが返すテーブル名情報は、結果セット内のカラムがデータベース テーブル内のカラムにマップされているかどうかによって異なります。結果セット内の各カラムがデータベース テーブル内のカラムにマップされている場合、DB2 ドライバはそのカラムに関連付けられているテーブル名を返します。結果セット内の各カラムがテーブル内のカラムにマップされていない場合 (集約やリテラルなど)、DB2 ドライバは空の文字列を返します。

ResultSet メタデータが返される Select 文には、エリアス、結合、および完全修飾名を含めることができます。以下のクエリは、ResultSetMetaData.getTableName() メソッドによって Select リスト内の各カラムの正しいテーブル名が返される、Select 文の例です。

   SELECT id, name FROM Employee
   SELECT E.id, E.name FROM Employee E 
   SELECT E.id, E.name AS EmployeeName FROM Employee E
   SELECT E.id, E.name, I.location, I.phone FROM Employee E, 
      EmployeeInfo I WHERE E.id = I.id
   SELECT id, name, location, phone FROM Employee,
      EmployeeInfo WHERE id = empId
   SELECT Employee.id, Employee.name, EmployeeInfo.location, 
      EmployeeInfo.phone FROM Employee, EmployeeInfo 
      WHERE Employee.id = EmployeeInfo.id

生成されたカラムの場合、ドライバによって返されるテーブル名は空の文字列です。以下のクエリは、生成されたカラム (「upper」という名前のカラム) を含む結果セットを返す Select 文の例です。

   SELECT E.id, E.name as EmployeeName, {fn UCASE(E.name)} 
      AS upper FROM Employee E

DB2 ドライバは、ResultSetMetaData.getSchemaName() メソッドと ResultSetMetaData.getCatalogName() メソッドが呼び出された場合、スキーマ名とカタログ名の情報を返すこともできます (ドライバがこの情報を判別できる場合)。たとえば、以下の文の場合、DB2 ドライバはカタログ名として「test」、スキーマ名として「test1」、テーブル名として「foo」を返します。

   SELECT * FROM test.test1.foo 

テーブル名、スキーマ名、およびカタログ名の情報を返すために必要な追加の処理は、ResultSetMetaData.getTableName()ResultSetMetaData.getSchemaName()、または ResultSetMetaData.getCatalogName() メソッドが呼び出された場合にのみ実行されます。

 


Rowset のサポート

DB2 ドライバは、以下のような RowSet インタフェースの JSR 114 実装をサポートします。

JSR 114 の詳細については、 http://www.jcp.org/en/jsr/detail?id=114 を参照してください。

 


自動生成キーのサポート

DB2 ドライバは自動生成キーの値の取得をサポートします。DB2 ドライバから返される自動生成キーは、auto-increment カラムの値です。

値を返す方法は、パラメータを含む Insert 文を使用しているかどうかによって異なります。

アプリケーションでは Statement.getGeneratedKeys メソッドを使用して、生成されたキーの値をドライバから取得します。

 


周知の問題

サーバ バージョンが DB2 v8 FixPak 11 より前の UNIX、Windows または Linux 上の DB2 UDB に接続する際に、パッチ レベルが同じかそれ以上のドライバ パッチを使用している場合、DB2 サーバにおける欠陥が原因で問題が発生する場合があります。接続の問題がある場合、現在のコンフィグレーションに次のドライバ プロパティを含める必要がある場合があります。

   ExtendedOptions=ServerReleaseLevel=SQL08020

ServerReleaseLevel を使用する状況に関するガイダンスとして、次の表を使用してください。

表 3-6 ServerReleaseLevel=SQL08020 の使用ガイドライン
サーバ バージョン
                                           ドライバ バージョン
 
3.4.72 より前
3.4.72 以上
3.5.14 より前
3.5.14 以上
DB2 v8 FP11 より前
使用不可/必要なし
使用すべき場合がある
使用不可/必要なし
使用すべき場合がある
DB2 v8 FP11 以上
使用不可/必要なし
使用不可
使用不可/必要なし
使用不可

詳細については、IBM の「サポート & ダウンロード」サイトの「DB2 UDB Version 8.1 FixPak 11 (also known as Version 8.2 FixPak 4)」を参照してください。


ページの先頭       前  次