WebLogic Type 4 JDBC ドライバ ガイド
![]() |
![]() |
![]() |
![]() |
注意 : BEA WebLogic Type 4 JDBC DB2 ドライバは WebLogic Server 8.1 サービス パック 2 およびサービス パック 3 で使用できます。WebLogic Server 8.1 GA、サービス パック 1、およびサービス パック 4 では使用できません。WebLogic Server 8.1 サービス パック 4 用のパッチが次の URL で入手できます。http://dev2dev.bea.com/products/wlplatform81/patch/wlplat81sp4_db2_patch.jsp
以下の節では、DB2 用の BEA WebLogic Type 4 JDBC ドライバのコンフィグレーション方法と使用方法について説明します。
DB2 用の BEA WebLogic Type 4 JDBC ドライバ (「DB2 ドライバ」) は次のバージョンをサポートします。
注意 : このドキュメントでは、DB2 の各バージョンを表すのに次の用語を使用します。
BEA WebLogic Type 4 JDBC DB2 ドライバのドライバ クラスは次のとおりです。
XA :weblogic.jdbcx.db2.DB2DataSource
非 XA :weblogic.jdbc.db2.DB2Driver
WebLogic Server ドメインで JDBC 接続プールをコンフィグレーションするときに、これらのドライバ クラスを使用します。
DB2 データベースに接続するには、以下の適切な形式の URL を使用します。
jdbc:bea:db2://db2_server_name
:port
;DatabaseName
=your_database
jdbc:bea:db2://db2_server_name
:port
;Location=db2_location
;CollectionId=your_collectionname
表 2-1 では、DB2 ドライバがサポートする JDBC 接続プロパティを示し、各プロパティについて説明します。WebLogic Server ドメインの JDBC 接続プールのコンフィグレーションでこれらの接続プロパティを使用できます。プロパティを指定するには、JDBC 接続プールのコンフィグレーションで次の形式を使用します。
property=value
注意 : すべての接続プロパティ名で大文字と小文字は区別されません。たとえば、Password は password と同じです。必須のプロパティには、その旨が記されています。各接続プロパティに付記されているデータ型は、JDBC 接続プールのプロパティ値で使用される Java データ型です。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表 2-2 に、非 XA バージョンの WebLogic Type 4 DB2 JDBC ドライバを使用する WebLogic Server 接続プールのサンプルのコンフィグレーション属性を示します。表 2-3 に、XA バージョンのドライバを使用する WebLogic Server 接続プールのサンプルのコンフィグレーション属性を示します。
|
|
|
|
以下のリストで説明するように DB2 ドライバに次の接続プロパティを設定すると、アプリケーションのパフォーマンスを向上させることができます。
DatabaseMetaData.getColumns
メソッドは、テーブルに関連付けられているシノニム (エイリアス) などのテーブルの特性を調べるために頻繁に使用されます。アプリケーションが DB2 for Linux/UNIX/Windows v7.1 または v7.2、DB2 for z/OS、あるいは DB2 for iSeries にアクセスしており、そのアプリケーションがデータベースのテーブル シノニムを使用していない場合は、この情報を無視するとドライバのパフォーマンスが向上します。アクセス先が DB2 for Linux/UNIX/Windows v8.1 および v8.2 である場合、ドライバは、DatabaseMetaData.getColumns()
メソッドに対して常にシノニムを返します。
パフォーマンスを向上させるため、システム カタログ テーブルのビューをデフォルト以外のカタログ スキーマで作成できます。DB2 ドライバは、このプロパティがビューを含むスキーマの名前に設定されていれば、カタログ テーブルのビューにアクセスできます。デフォルト カタログ スキーマは、DB2 for Linux/UNIX/Windows では SYSCAT、DB2 for z/OS では SYSIBM、DB2 for iSeries では QSYS2 です。
カタログ メソッドを正しく機能させるには、特定のカタログ テーブルのビューが指定したスキーマに存在している必要があります。必要となるビューは、使用している DB2 データベースによって異なります。指定したスキーマに存在している必要のあるカタログ テーブルのビューについては、「カタログ メソッドにデフォルト以外のスキーマを使用する」を参照してください。
スクロールインセンシティブな結果セットを扱う際のパフォーマンスを向上させるため、ドライバでは、結果セット データをディスクに書き込む代わりにメモリにキャッシュすることができます。デフォルトでは、インセンシティブな結果セット データのうち 2MB がメモリにキャッシュされ、その残りがディスクに書き込まれます。ドライバがデータをディスクに書き込む前に使用するメモリの量を増やすか、ドライバがインセンシティブな結果セット データをディスクに書き込まないように設定すると、パフォーマンスが向上します。最大キャッシュ サイズは 2GB です。
ドライバがアプリケーション サーバ内部から実行されるのでない場合、または独自の Prepared Statement のプールを提供しない別のアプリケーション内部から実行されるのでない場合は、パフォーマンスを向上させるため、ドライバ独自の内部 Prepared Statement のプールを有効にする必要があります。ドライバの内部 Prepared Statement のプールを有効にすると、ドライバは、アプリケーションによって作成された特定数の Prepared Statement をキャッシュします。たとえば、MaxPooledStatements
プロパティを 20 に設定した場合、ドライバは、アプリケーションによって作成された最後の 20 個の Prepared Statement をキャッシュします。このプロパティに設定された値が、アプリケーションが使用する Prepared Statement の数よりも大きい場合、すべての Prepared Statement がキャッシュされます。
DB2 ドライバは、デフォルトでは、ResultSetMetaData.getTableName()
メソッドが呼び出されたとき、結果セットで各カラムの正しいテーブル名を返すために必要となる追加処理を省略します。そのため getTableName()
メソッドは、結果セットで各カラムについて空の文字列を返す場合があります。アプリケーションがテーブル名情報を必要としないことがわかっている場合は、デフォルト設定で最大限のパフォーマンスが得られます。
ResultSet メタデータを返す方法の詳細については、「ResultSet メタデータのサポート」を参照してください。
挿入または更新する大きなバイナリ オブジェクトが Blob として格納される場合は、バイナリ ストリームを Blob データとして送信すると、パフォーマンスが向上します。そのためには、このプロパティを true に設定します。
アプリケーションで使用される SQL 文に改行文字が含まれないことがわかっている場合は、改行文字を削除するために必要な解析を省略すると、ドライバのパフォーマンスが向上します。そのためには、StripNewlines
プロパティを false に設定します。
アプリケーションが、現在のユーザのみが所有者であるテーブルおよびビューにアクセスする必要がある場合は、このプロパティを true に設定すると、アプリケーションのパフォーマンスが向上します。このプロパティを true に設定すると、ドライバは、getTables()
メソッドおよび getColumns()
メソッドを実行する際、現在のユーザが所有するテーブルおよびビューのみを返します。このプロパティを true に設定することは、接続時に指定した ユーザ ID を、schemaPattern
引数として getTables()
または getColumns()
の呼び出しに渡すことに相当します。
AS/400 上で動作する DB2 データベースに接続する場合、locationName プロパティを設定する必要があります。
Properties
オブジェクトを設定します (「DB2 接続プロパティ」を参照)。
jdbc:bea:db2://<Host>:<Port>;LocationName=RelationalDatabaseName
...
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 パッケージは、プログラムの準備中に生成され、SQL 文の実行に使用される DB2 サーバ上の制御構造です。DB2 ドライバは接続時に必要なすべての DB2 パッケージを自動的に作成します。パッケージがすでに存在する場合、ドライバは既存のパッケージを使用して接続を確立します。
注意 : 接続用に作成する必要のあるパッケージの数やサイズによっては、初期接続に 2、3 分かかる場合があります。以降の接続ではこの遅延は発生しません。
デフォルトでは、DB2 ドライバによって作成される DB2 パッケージには 200 の動的セクションが含まれており、NULLID コレクション (またはライブラリ) の中に作成されます。ほとんどの場合、DB2 ドライバが接続時に自動的に作成するため、DB2 パッケージを作成する必要はありません。必要な場合は、次のいずれかの方法で DB2 パッケージを作成できます。
dbping
ユーティリティを使用して、DB2 ドライバに手動でパッケージを作成させる。「dbping を使用した DB2 パッケージの作成」を参照してください。注意 : ユーザ ID にデータベースに対する CREATE PACKAGE 特権がなければなりません。ない場合は、データベース管理者が代わりにパッケージを作成する必要があります。
JDBC 接続プールのコンフィグレーションに示されたユーザ ID はパッケージのオーナーでなければなりません。
DB2 パッケージを作成する際のユーザ ID には、データベースに対する BINDADD 特権が付与されている必要があります。適切な特権が付与されているかどうか不明な場合は、データベース管理者に問い合わせてください。
WebLogic Type 4 JDBC DB2 ドライバで DB2 サーバ上にパッケージを作成するには、WebLogic Server dbping
ユーティリティを使用できます。dbping
ユーティリティは、JDBC ドライバを介したクライアント マシンおよび DBMS 間の接続のテストに使用されます。WebLogic Type 4 JDBC DB2 ドライバは DB2 パッケージがまだ存在しない場合は自動的に作成するため、このユーティリティを実行すると DB2 サーバ上にデフォルトの DB2 パッケージが作成されます。
dbping
ユーティリティを使用した DB2 パッケージの作成の詳細については、「dbping を使用して DB2 パッケージを作成する」を参照してください。
初期接続 URL 内に特定の接続プロパティを設定して、DB2 パッケージを自動的に作成することができます。表 2-4 に、DB2 パッケージを作成する場合に初期接続 URL で使用する接続プロパティを示します。
注意 : WebLogic Server JDBC 接続プールでは、接続プールのすべての接続が同じ URL と接続プロパティを使用するため、この方法の使用はお勧めしません。複数の接続を持つ JDBC 接続プールを作成すると、パッケージはデータベース接続が作成されるたびに再作成されます。
|
|
CreateDefaultPackage=TRUE
を使用するとデフォルトの名前のパッケージが作成されます。CreateDefaultPackage=TRUE
を使用して CollectionId を指定しない場合、NULLID CollectionId が作成されます。
注意 : DB2 for Linux/UNIX/Windows で新しい DB2 パッケージを作成するには、CreateDefaultPackage=true
と一緒に ReplacePackage=true
を使用する必要があります。DB2 パッケージがすでに存在している場合に ReplacePackage=true
を使用すると、そのパッケージは置き換えられます。
次の URL では、400 の動的セクションを持つ DB2 パッケージが作成されます。DB2 パッケージがすでに存在している場合は、新しく作成したパッケージで置き換えられます。
jdbc:bea:db2://server1:50000;DatabaseName=SAMPLE;
CreateDefaultPackage=TRUE;ReplacePackage=TRUE;DynamicSections=400
次の URL では、400 の動的セクションを持つ DB2 パッケージが作成されます。
jdbc:bea:db2://server1:50000;LocationName=SAMPLE;
CreateDefaultPackage=TRUE;DynamicSections=400
動的セクションは実在する実行可能オブジェクトで、動的 SQL リクエストに応答するために必要なロジックが含まれています。これらのセクションは、ハンドルや Prepared Statement、およびそれに関連付けられた結果セットで使用します。
場合によっては、デフォルトの数 (200) より多くの動的セクションを持つ DB2 パッケージを作成する必要があります。アプリケーションで多数の動的セクションを持つ DB2 パッケージが必要な場合は、次の情報を考慮してください。
PCKCACHE_SZ
を増やして、多数のパッケージを作成できるようにする必要があります。
表 2-5 では、DB2 ドライバでサポートされるデータ型を示し、JDBC データ型へどのようにマップされるかを示します。
|
|
|
|
|
|
|
|
データ型の詳細については、「getTypeInfo」を参照してください。
CatalogSchema
プロパティがデフォルト スキーマ以外のスキーマで適切に設定されている場合、カタログ メソッドを正しく機能させるには、表 2-6 に示すカタログ テーブルのビューが指定したスキーマに存在していなければなりません。必要となるビューは、使用している DB2 データベースによって異なります。
DB2 ドライバでサポートされている SQL エスケープ シーケンスの詳細については、「JDBC の SQL エスケープ シーケンス」を参照してください。
DB2 ドライバがサポートするアイソレーション レベルを表 2-7 に示します。JDBC アイソレーション レベルは、表に示す適切な DB2 トランザクション アイソレーション レベルにマップされています。デフォルトのアイソレーション レベルは Read Committed
です。
DB2 ドライバは、スクロールインセンシティブな結果セット、および更新可能な結果セットをサポートしています。
注意 : DB2 ドライバが、要求された結果セットのタイプまたは同時実行性をサポートできない場合は、カーソルを自動的にダウングレードして詳細情報の入った SQLWarning を生成します。
DB2 ドライバで JTA を介した分散トランザクションを使用するには、DB2 for Linux/UNIX/Windows v8.1 または v8.2 が必要です。
DB2 ドライバでの Blob の取得と更新は、次のデータベースとの組み合わせでサポートされます。
DB2 ドライバでの Clob の取得と更新は、すべてのサポート対象 DB2 データベースとの組み合わせでサポートされます。次の DB2 データベースとの組み合わせの場合、DB2 ドライバがサポートする Clob の最大サイズは 2GB になります。
それ以外のサポート対象 DB2 データベースとの組み合わせの場合、DB2 ドライバが取得と更新をサポートする Clob の最大サイズは 32KB になります。
DB2 ドライバでの DBClob の取得と更新は、次のデータベースとの組み合わせでサポートされます。
DB2 for Linux/UNIX/Windows v8.1 および v8.2、DB2 for z/OS、DB2 for iSeries では、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 ドライバは、この節で説明するようにパラメータ メタデータを返すことができます。
次の DB2 データベースとの組み合わせの場合、DB2 ドライバは、あらゆるタイプの SQL 文のパラメータ メタデータを返すことができます。
それ以外のサポート対象 DB2 データベースの場合、DB2 ドライバは、以下の形式の Insert 文および Update 文のパラメータ メタデータを返すことができます。
INSERT INTO foo VALUES (?, ?, ?)
INSERT INTO foo (col1, col2, col3) VALUES (?, ?, ?)
UPDATE foo SET col1=?, col2=?, col3=? WHERE col1
operator
? [{AND | OR} col2
operator
?]
operator
は、SQL 演算子 (=、<、>、<=、>=、および <>) です。
次の DB2 データベースとの組み合わせの場合、DB2 ドライバは、あらゆるタイプの SQL 文のパラメータ メタデータを返すことができます。
それ以外のサポート対象 DB2 データベースの場合、DB2 ドライバは、ANSI SQL 92 エントリレベルの述語 (比較、BETWEEN、IN、LIKE、EXISTS などの述語構文) で記述されたパラメータを含む Select 文のパラメータ メタデータを返すことができます。構文の詳細については、ANSI SQL に関するドキュメントを参照してください。
Select 文のパラメータ メタデータは、次のいずれかの条件に該当する場合に返すことができます。
SELECT * FROM foo WHERE bar > ?
SELECT * FROM foo WHERE (SELECT x FROM y
WHERE z = 1) < ?
以下に、パラメータ メタデータを返すことのできる別の 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 = ?"
アプリケーションでテーブル名情報が必要な場合、DB2 ドライバでは、Select 文の ResultSet メタデータでテーブル名情報を返すことができます。ResultSetMetaDataOptions
プロパティを 1 に設定すると、DB2 ドライバは、ResultSetMetaData.getTableName()
メソッドが呼び出されたとき、結果セットで各カラムの正しいテーブル名を返すための追加処理を実行します。このように設定しない場合、getTableName()
メソッドは、結果セットで各カラムについて空の文字列を返す場合があります。
DB2 ドライバが返すテーブル名情報は、結果セットのカラムがデータベース内のテーブルのカラムにマップされているかどうかによって異なります。DB2 ドライバは、データベース内のテーブルのカラムにマップされている結果セットのカラムについては、そのカラムに関連付けられているテーブル名を返します。データベース内のテーブルのカラムにマップされていない結果セットのカラム (集約関数やリテラルなど) については、空の文字列を返します。
ResultSet メタデータを返す Select 文には、エイリアス、結合、および完全修飾名を含めることができます。以下のクエリの Select 文の場合、ResultSetMetaData.getTableName()
メソッドは、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()
の各メソッドが呼び出された場合にのみ実行されます。
DB2 ドライバでは、次のような RowSet インタフェースの JSR 114 実装をサポートしています。
JSR 114 の詳細については、http://www.jcp.org/en/jsr/detail?id=114 を参照してください。
DB2 ドライバは自動生成キーの値の取得をサポートします。DB2 ドライバから返される自動生成キーは、auto-increment カラムの値です。
値を返す方法は、パラメータを含む Insert 文を使用しているかどうかによって異なります。
Insert
文を使用する場合、DB2 ドライバは次の形式の Statement.execute
メソッドおよび Statement.executeUpdate
メソッドをサポートします。これらのメソッドは、ドライバに自動生成キーの値を返すよう通知するためのものです。 Statement.execute (String sql, int autoGeneratedKeys)
Statement.executeUpdate (String sql, int autoGeneratedKeys)
Insert
文を使用する場合、DB2 ドライバは次の形式の Connection.prepareStatement
メソッドをサポートします。このメソッドは、ドライバに自動生成キーの値を返すよう通知するためのものです。アプリケーションは Statement.getGeneratedKeys
メソッドを使用して、生成されたキーの値をドライバから取得します。
DB2 サーバ に欠陥があるため、DB2 v8 FixPak 11 より前のサーバ バージョンの UNIX、Windows、または Linux 上で DB2 UDB に接続している場合、上記のパッチ レベル以上のドライバ パッチを使用すると問題が発生する可能性があります。接続に問題がある場合は、コンフィグレーションに次のドライバ プロパティを使用してください。
ExtendedOptions=ServerReleaseLevel=SQL08020
次のテーブルを使って ServerReleaseLevel
を使用するタイミングについて説明します。
詳細については、IBM のサポートとダウンロード サイト DB2 UDB Version 8.1 FixPak 11 (Version 8.2 FixPak 4 とも呼ばれる) を参照してください。
![]() ![]() |
![]() |
![]() |