Exécution statique d'instructions SQL à partir d'applications d'API différentes de pureQuery

Avec l'optimisation client de pureQuery, vous pouvez exécuter de manière statique, plutôt que dynamique, les instructions SQL imbriquées dans les applications Java qui se connectent à la base de données à l'aide de JDBC.

Avant de commencer

Vérifiez que votre système est conforme aux exigences de configuration logicielle et matérielle. Voir Configuration requise pour InfoSphere Optim pureQuery Runtime.

Pourquoi et quand exécuter cette tâche

L'optimisation client est différentes des autres technologies de prise en charge de l'exécution statique des instructions SQL :
  • Elle n'utilise aucun préprocesseur, le langage de programmation COBOL l'utilisant pour SQL imbriqué.
  • Elle n'utilise aucun traducteur ni personnaliseur, à l'inverse de SQLJ.
  • Il n'est pas utile de coder les instructions SQL dans la source d'une application.

L'optimisation client n'oblige pas à détenir ces composants ni modifier votre code. Elle préfère modifier la manière dont le pilote JDBC interagit avec une application.

Procédure

Pour exécuter de manière statique les instructions SQL se trouvant dans une application d'API différente de pureQuery, procédez comme suit :

  1. Capturez les instructions SQL que vous voulez exécuter en mode statique.
  2. Indiquez les options de configuration des modules DB2 que vous allez créer à l'étape suivante à partir des instructions SQL capturées.
  3. Créez et liez les modules DB2 contenant les instructions SQL.
  4. Exécutez l'application d'API différente de pureQuery afin d'exécuter de manière statique les instructions SQL capturées.

Exemple

Cet exemple utilise l'application d'API différente de pureQuery suivante :

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
Etape 1 : Capture des instructions SQL se trouvant dans l'application
Exécutez l'application en mode de capture ainsi que les instructions SQL que vous souhaitez exécuter de manière statique. Les instructions SQL qui ont abouti sont enregistrées dans un fichier XML, appelé fichier pureQueryXML.
Une manière d'attribuer la valeur ON à captureMode et de spécifier un fichier pureQueryXML consiste à utiliser un fichier pdq.properties en texte en clair dont le contenu est le suivant :
pdq.captureMode=ON
pdq.pureQueryXml=Sample1Cptr.pdqxml
A l'issue de l'application, le répertoire de travail contient un fichier pureQueryXML appelé Sample1Cptr.pdqxml

Toutes les instructions d'un seul fichier pureQueryXML sont rassemblées par StaticBinder. Par conséquent, si votre application se connecte et exécute SQL en fonction de plusieurs bases de données, vous devez créer un fichier pureQueryXML pour chaque URL de connexion ou objet DataSource.

Avec une application plus importante, vous pouvez capturer des instructions SQL de manière incrémentielle. Vous pouvez capturer un certain nombre d'instructions SQL dans le cadre d'une exécution initiale, puis capturer les instructions restantes dans le même fichier lors d'exécutions ultérieures. Toutefois, si vous modifiez la source de l'application, sans modifier les URL des différents objets de connexion lors de la configuration de plusieurs fichiers pureQueryXML, vous devez modifier vos fichiers pureQueryXML et relancer le processus de capture.

Vous devez capturer les instructions SQL pendant le test de l'application d'API différente de pureQuery, en les exécutant en fonction de bases de données similaires à celles que vous prévoyez d'utiliser lors du déploiement de votre application vers une environnement de production.

Etape 2 : Configuration des modules DB2
Lors de l'exécution de l'utilitaire Configure sur un fichier pureQueryXML, vous indiquez le nom du module racine DB2 que vous allez créer à l'étape suivante avec StaticBinder. Vous pouvez également indiquer l'ID collection et l'ID version, si vous n'acceptez pas les valeurs par défaut. L'utilitaire Configure stocke ces informations dans le fichier pureQueryXML, que vous fournissez ultérieurement à StaticBinder.
Voici une manière d'exécuter l'utilitaire Configure :
java com.ibm.pdq.tools.Configure -pureQueryXml Sample1Cptr.pdqxml –rootPkgName SMPL1 -collection COLL01

Si vous exécutez l'utilitaire Configure sur un fichier pureQueryXML, puis capturez plusieurs instructions SQL dans ce fichier, vous devez de nouveau exécuter l'utilitaire Configure sur le fichier.

Etape 3 : Liaison des instructions SQL dans les modules DB2
Suite à l'exécution de l'utilitaire Configure sur un fichier pureQueryXML, vous pouvez exécuter l'utilitaire StaticBinder de pureQuery pour empaqueter les instructions SQL figurant dans le fichier pureQueryXML.
Voici une manière d'exécuter l'utilitaire StaticBinder :
java com.ibm.pdq.tools.StaticBinder –url jdbc:db2://svl01:500/DB2M -username user01 -password myPass -pureQueryXml Sample1Cptr.pdqxml
Etape 4 : Exécution de l'application
Lors de l'exécution de votre application, son mode d'exécution étant défini sur STATIC, les informations du fichier pureQueryXML permettent à pureQuery d'exécuter de manière statique les instructions SQL capturées.
Une manière de définir le mode d'exécution et le fichier pureQueryXML consiste à modifier le fichier pdq.properties que vous avez créé à l'étape 1 :
pdq.executionMode=STATIC
pdq.pureQueryXml=Sample1Cptr.pdqxml

Par défaut, votre application peut exécuter de manière dynamique des instructions SQL que vous n'avez pas capturées.


Commentaires