SQL-Anweisungen statisch aus Nicht-pureQuery-API-Anwendungen ausführen

Mit der Clientoptimierung von pureQuery können Sie die SQL-Anweisungen, die in Java™-Anwendungen, die Verbindungen zu Datenbanken über JDBC herstellen, eingebettet sind, statisch statt dynamisch ausführen.

Vorbereitende Schritte

Stellen Sie sicher, dass Ihr System die Hardware- und Softwarevoraussetzungen erfüllt. Siehe Systemvoraussetzungen für Optim pureQuery Runtime.

Informationen zu diesem Vorgang

Clientoptimierung hat nichts mit anderen Technologien gemeinsam, die die statische Ausführung von SQL unterstützen:
  • Es wird kein Vorprozessor verwendet, wie bei der Programmiersprache COBOL für eingebettetes SQL der Fall ist.
  • Im Unterschied zu SQLJ wird kein Umsetzer oder Customizer verwendet.
  • SQL-Anweisungen brauchen in der Quelle einer Anwendung nicht fest codiert zu sein.

Die Clientoptimierung erfordert weder diese Komponenten noch Änderungen am Code, sondern ändert die Interaktion zwischen JDBC-Treiber und Anwendung.

Vorgehensweise

Gehen Sie wie folgt vor, um SQL-Anweisungen einer Nicht-pureQuery-API-Anwendung statisch auszuführen:

  1. Erfassen Sie die SQL-Anweisungen, die Sie statisch ausführen wollen.
  2. Geben Sie Optionen zum Konfigurieren der DB2-Pakete an, die Sie im nächsten Schritt aus den erfassten SQL-Anweisungen erstellen wollen.
  3. Erstellen und binden Sie die DB2-Pakete, die die SQL-Anweisungen enthalten.
  4. Führen Sie die Nicht-pureQuery-API-Anwendung aus, um die erfassten SQL-Anweisungen statisch auszuführen.

Beispiel

Das Beispiel verwendet die folgende einfache Nicht-pureQuery-API-Anwendung:

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
Schritt 1: SQL-Anweisungen erfassen, die in der Anwendung enthalten sind
Führen Sie die Anwendung im Aufzeichnungsmodus aus und führen Sie die SQL-Anweisungen aus, die Sie statisch ausführen wollen. Die SQL-Anweisungen, die erfolgreich ausgeführt werden, werden in einer XML-Datei aufgezeichnet, die als pureQueryXML-Datei bezeichnet wird.
Eine Möglichkeit, den Aufzeichnungsmodus (captureMode) auf ON zu setzen und eine pureQueryXML-Datei anzugeben, besteht darin, eine Datei pdq.properties mit unverschlüsseltem Text zu verwenden, die den folgenden Inhalt hat:
pdq.captureMode=ON
pdq.pureQueryXml=Sample1Cptr.pdqxml
Nachdem die Anwendung ausgeführt wurde, ist im Arbeitsverzeichnis eine pureQueryXML-Datei mit dem Namen Sample1Cptr.pdqxml vorhanden.

Alle Anweisungen in einer pureQueryXML-Datei werden durch StaticBinder paketiert. Das heißt, wenn Ihre Anwendung Verbindungen zu mehreren Datenbanken herstellt und für diese Datenbanken SQL ausführt, müssen Sie für jede Verbindungs-URL oder jedes Datenquellenobjekt eine pureQueryXML-Datei erstellen.

Wenn es sich um umfangreiche Anwendungen handelt, können Sie auswählen, SQL-Anweisungen auch inkrementell zu erfassen. Sie können einen Teil der SQL-Anweisungen während einer ersten Ausführung erfassen und den Rest der Anweisungen während späteren Ausführungen in denselben Dateien erfassen. Wenn Sie jedoch die Quelle der Anwendung modifizieren, und zwar nicht nur die URLs für andere Verbindungsobjekte beim Einrichten mehrerer pureQueryXML-Dateien, müssen Sie Ihre pureQueryXML-Dateien löschen und den Erfassungsprozess erneut starten.

Erfassen Sie SQL-Anweisungen während Sie Ihre Nicht-pureQuery-API-Anwendung testen und führen Sie sie für Datenbanken aus, die den Datenbanken ähnlich sind, die Sie verwenden wollen, wenn Sie Ihre Anwendung in einer Produktionsumgebung implementieren.

Schritt 2: DB2-Pakete konfigurieren
Wenn Sie das Dienstprogramm Configure für eine pureQueryXML-Datei ausführen, geben Sie den Stammpaketnamen des DB2-Pakets an, das Sie im nächsten Schritt mit StaticBinder erstellen. Sie können auch die Objektgruppen-ID und die Versions-ID angeben, wenn Sie die Standardwerte nicht übernehmen wollen. Das Dienstprogramm Configure speichert diese Informationen in der pureQueryXML-Datei, die Sie später in StaticBinder angeben.
Im Folgenden wird eine Möglichkeit zum Ausführen des Dienstprogramms Configure beschrieben:
java com.ibm.pdq.tools.Configure -pureQueryXml Sample1Cptr.pdqxml –rootPkgName SMPL1 -collection COLL01

Wenn Sie das Dienstprogramm Configure für eine pureQueryXML-Datei ausführen und mehrere SQL-Anweisungen in dieser Datei erfassen, müssen Sie das Dienstprogramm Configure erneut für die Datei ausführen.

Schritt 3: SQL-Anweisungen in DB2-Paketen erfassen
Wenn Sie das Dienstprogramm Configure für eine pureQueryXML-Datei ausgeführt haben, können Sie das pureQuery-Dienstprogramm StaticBinder ausführen, um die in der pureQueryXML-Datei aufgelisteten SQL-Anweisungen zu binden.
Im Folgenden wird eine Möglichkeit zum Ausführen des Dienstprogramms StaticBinder beschrieben:
java com.ibm.pdq.tools.StaticBinder –url jdbc:db2://svl01:500/DB2M -username user01 -password myPass -pureQueryXml Sample1Cptr.pdqxml
Schritt 4: Anwendung ausführen
Wenn Sie Ihre Anwendung ausführen und der Ausführungsmodus auf STATIC gesetzt ist, kann pureQuery aufgrund der in den pureQueryXML-Dateien enthaltenen Informationen, die erfassten SQL-Anweisungen statisch ausführen.
Eine Möglichkeit, den Ausführungsmodus und die pureQueryXML-Datei festzulegen, besteht darin, die in Schritt 1 erstellte Datei pdq.properties zu modifizieren:
pdq.executionMode=STATIC
pdq.pureQueryXml=Sample1Cptr.pdqxml

Standardmäßig kann Ihre Anwendung alle SQL-Anweisungen dynamisch ausführen, die Sie nicht erfasst haben.


Feedback