SQL Outline では、こうしたコンポーネントも必要としませんし、コードに変更を加えることも不要で、むしろ JDBC ドライバーがアプリケーションと相互作用する方法を変更します。
z/OS 上でアプリケーションを実行する場合、JDBC タイプ 2 接続を使用してデータベースに接続できます。JDBC タイプ 2 ドライバーは、Java およびネイティブ・コードの組み合わせであるため、タイプ 2 接続は一般にタイプ 4 接続よりもパフォーマンスの点で優れています。
JDBC アプリケーション内にある SQL ステートメントを静的に実行するには、以下のようにします。
この例では、以下のような簡単な JDBC アプリケーションを使用します。
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
java –Ddb2.jcc.pdqProperties=captureMode(on),pureQueryXml(Sample1Cptr.pdqxml) Sample1Sample1 の完了後、現行ディレクトリーに pureQueryXML ファイルが Sample1Cptr.pdqxml. という名前で存在します。
1 つの pureQueryXML ファイル内のすべてのステートメントが、StaticBinder によって一緒にパッケージ化されます。そのため、ご使用のアプリケーションが複数のデータベースに接続して SQL を実行する場合には、それぞれの Connection URL または DataSource オブジェクトごとに 1 つの pureQueryXML ファイルを作成する必要があります。
大規模なアプリケーションでは、徐々に SQL ステートメントをキャプチャーするように選択できます。 初期実行の際に幾らかの SQL ステートメントをキャプチャーし、その後の実行の際に残りの SQL ステートメントを同じファイル (複数も可) にキャプチャーできます。ただし、アプリケーションのソースを変更した場合 (複数の pureQueryXML ファイルをセットアップするときに異なる Connection オブジェクトの URL を変更する場合は除く)、 pureQueryXML ファイルを削除してから、キャプチャー・プロセスを再開しなければなりません。
JDBC アプリケーションのテスト中に SQL ステートメントをキャプチャーしてください。その際、アプリケーションを実稼働環境にデプロイする際に使用する予定のデータベースと類似のデータベースに対して、それらの SQL ステートメントを実行します。
java com.ibm.pdq.tools.StaticBinder –url jdbc:db2://svl01:500/DB2M -username user01 -password myPass -pureQueryXml Sample1Cptr.pdqxml
java -Ddb2.jcc.pdqProperties=executionMode(STATIC),pureQueryXml(Sample1Cptr.pdqxml) Sample1
デフォルトでは、キャプチャーされていない SQL ステートメントをアプリケーションが動的に実行できます。