pureQuery 以外の API アプリケーションからの SQL ステートメントの静的な実行

pureQuery のクライアント最適化を使用して、データベースに JDBC を用いて接続する Java アプリケーションに組み込まれている SQL ステートメントを動的ではなく静的に実行することができます。

始める前に

システムがハードウェア要件およびソフトウェア要件を満たした状態にしてください。 InfoSphere™ Optim™ pureQuery Runtime のシステム要件を参照してください。

このタスクについて

クライアント最適化は、SQL の静的実行をサポートする他のテクノロジーとは以下の点で異なります。
  • COBOL プログラミング言語で組み込み SQL に使用するようなプリプロセッサーは使用しません。
  • SQLJ とは異なり、変換プログラムまたはカスタマイザーは使用しません。
  • アプリケーションのソースに SQL ステートメントをハードコーディングする必要がありません。

クライアント最適化では、JDBC ドライバーがアプリケーションと相互作用する方法を変更します。上記のコンポーネントやコードの変更は必要ありません。

手順

pureQuery 以外の API アプリケーション内にある SQL ステートメントを静的に実行するには、以下のようにします。

  1. 静的に実行する SQL ステートメントをキャプチャーします。
  2. 次のステップで、キャプチャーされた SQL ステートメントから作成する DB2® パッケージを構成するためのオプションを指定します。
  3. SQL ステートメントが含まれる DB2 パッケージを作成およびバインドします。
  4. pureQuery 以外の API アプリケーションを実行して、キャプチャーした SQL ステートメントを静的に実行します。

この例では、以下のような簡単な pureQuery 以外の API アプリケーションを使用します。

import java.sql.*;
import com.ibm.db2.jcc.*;
public class Sample1
{
	public static void main (String[] args) throws SQLException, ClassNotFoundException
	{
		Connection jdbcCon=null;
		try {
			Class.forName("com.ibm.db2.jcc.DB2Driver");
			jdbcCon=DriverManager.getConnection(
				"jdbc:db2://svl01:500/DB2M", "user01", "myPass");
		}
		catch (SQLException e) {
			System.out.println(e);
		}
		try {
			PreparedStatement pStmt = jdbcCon.prepareStatement(
				"INSERT INTO ADMF001.VIEW1(C1, C3, C2) VALUES(?,?,?)");
			pStmt.setString(1, "1");
			pStmt.setInt(2, 3);
			pStmt.setDouble(3, 2.0e3);
			pStmt.executeUpdate();
			pStmt.close();

			Statement selStmt = jdbcCon.createStatement(
				ResultSet.TYPE_FORWARD_ONLY,
				ResultSet.CONCUR_UPDATABLE);
				ResultSet rs = selStmt.executeQuery(
					"SELECT * FROM ADMF001.VIEW1 WHERE C2 > 200");
			System.out.println("moving to the first row");
			if (rs.next()) {
				System.out.println("deleting it");
				Statement stmt = jdbcCon.createStatement();
				stmt.executeUpdate(
					"DELETE FROM ADMF001.VIEW1 WHERE CURRENT OF "
					+ rs.getCursorName());
				stmt.close();
				}
			selStmt.close();
		}
		catch (SQLException e) {
			System.out.println( "Sample1: " + e );
		}
		jdbcCon.close();
	} //end main
} // end class Sample1
ステップ 1: アプリケーションで SQL ステートメントを実行します。
キャプチャー・モードでアプリケーションを実行し、静的に実行する SQL ステートメントを実行します。正常に実行された SQL ステートメントは XML ファイル内に記録されます。このファイルは、pureQueryXML ファイルと呼ばれます。
captureMode を ON に設定し、pureQueryXML ファイルを指定する方法の 1 つとして、以下のような内容のプレーン・テキスト pdq.properties ファイルを使用します。
pdq.captureMode=ON
pdq.pureQueryXml=Sample1Cptr.pdqxml
アプリケーションの完了後、現行ディレクトリーに pureQueryXML ファイルが Sample1Cptr.pdqxml. という名前で存在します。

1 つの pureQueryXML ファイル内のすべてのステートメントが、StaticBinder によって一緒にパッケージ化されます。そのため、ご使用のアプリケーションが複数のデータベースに接続して SQL を実行する場合には、それぞれの Connection URL または DataSource オブジェクトごとに 1 つの pureQueryXML ファイルを作成する必要があります。

大規模なアプリケーションでは、徐々に SQL ステートメントをキャプチャーするように選択できます。 初期実行の際に幾らかの SQL ステートメントをキャプチャーし、その後の実行の際に残りの SQL ステートメントを同じファイル (複数も可) にキャプチャーできます。ただし、アプリケーションのソースを変更した場合 (複数の pureQueryXML ファイルをセットアップするときに異なる Connection オブジェクトの URL を変更する場合は除く)、pureQueryXML ファイルを削除してから、キャプチャー・プロセスを再開しなければなりません。

pureQuery 以外の API アプリケーションのテスト中に SQL ステートメントをキャプチャーしてください。その場合、アプリケーションを実稼働環境にデプロイする際に使用する予定のデータベースと類似のデータベースに対して、それらの SQL ステートメントを実行します。

ステップ 2: DB2 パッケージの構成
pureQueryXML ファイルで Configure ユーティリティーを実行するときに、次のステップで StaticBinder を使用して作成する DB2 パッケージのルート・パッケージ名を指定します。また、デフォルト値を受け入れない場合には、コレクション ID とバージョン ID も指定できます。Configure ユーティリティーはこの情報を pureQueryXML ファイルに格納しますので、後ほどこれを StaticBinder に提供してください。
以下に示すのは、Configure ユーティリティーの実行方法の 1 つです。
java com.ibm.pdq.tools.Configure -pureQueryXml Sample1Cptr.pdqxml –rootPkgName SMPL1 -collection COLL01

Configure ユーティリティーを pureQueryXML ファイルで実行してから、そのファイルにさらに SQL ステートメントをキャプチャーする場合には、Configure ユーティリティーをキャプチャー・ファイル上で再実行する必要があります。

ステップ 3: DB2 パッケージへの SQL ステートメントのバインド
pureQueryXML ファイルで Configure ユーティリティーを実行した後、pureQuery StaticBinder ユーティリティーを実行して、pureQueryXML ファイル内にリストされている SQL ステートメントをパッケージ化できます。
以下に示すのは、StaticBinder ユーティリティーの実行方法の 1 つです。
java com.ibm.pdq.tools.StaticBinder –url jdbc:db2://svl01:500/DB2M -username user01 -password myPass -pureQueryXml Sample1Cptr.pdqxml
ステップ 4: アプリケーションの実行
アプリケーションの実行モードを STATIC に設定して実行すると、pureQueryXML ファイル内の情報によって、pureQueryではキャプチャーされた SQL ステートメントを静的に実行できます。
実行モードと pureQueryXML ファイルを設定する方法の 1 つとして、ステップ 1 で作成した pdq.properties ファイルを以下のように変更します。
pdq.executionMode=STATIC
pdq.pureQueryXml=Sample1Cptr.pdqxml

デフォルトでは、キャプチャーされていない SQL ステートメントをアプリケーションが動的に実行できます。


フィードバック