Interface de programmation Application / BD. Hiver 2011 C. Desrosiers

Documents pareils
Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Java DataBaseConnectivity

Introduction à JDBC. Accès aux bases de données en Java

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Programmation d application Bases de données avec Java

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Bases de données avancées

TP Programmation Java / JDBC / Oracle

Accès aux bases de données

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

OpenPaaS Le réseau social d'entreprise

Cours Bases de données 2ème année IUT

Vues: définition. Vues: avantages. Vues: inconvénients. Vues: exemple. Vues: syntaxe 08/12/2009

Java et les bases de données

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Laboratoires de bases de données. Laboratoire n 6. Programmation SQL. par Danièle BAYERS et Louis SWINNEN

Bases de Données relationnelles et leurs systèmes de Gestion

Bases de Données Avancées PL/SQL

Panorama des Bases de Données

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Oracle Le langage procédural PL/SQL

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Notes de cours : bases de données distribuées et repliquées

TP Contraintes - Triggers

Devoir Data WareHouse

Présentation du PL/SQL

JDBC le langage Java XVI-1 JMF

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Intégrité sémantique dans les bases de données relationnelles

1. Langage de programmation Java

Corrigés détaillés des exercices

//////////////////////////////////////////////////////////////////// Administration bases de données

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Configurer la supervision pour une base MS SQL Server Viadéis Services

Quelques aspects du Relationnel-Objet du SGBD Oracle

Java Licence Professionnelle CISII,

Programmer en JAVA. par Tama

Application web de gestion de comptes en banques

Introduction au PL/SQL Oracle. Alexandre Meslé

Plan du cours. Historique du langage Nouveautés de Java 7

CREATION WEB DYNAMIQUE

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

A QUOI SERVENT LES BASES DE DONNÉES?

Chapitre 5 : Les procédures stockées PL/SQL

Auto-évaluation Oracle: cours de base

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Olivier Mondet

Cours Bases de données 2ème année IUT

BASES DE DONNEES TP POSTGRESQL

Le langage procédural PL-PGSQL

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

Modernisation, développement d applications et DB2 sous IBM i Technologies, outils et nouveautés Volubis.fr

Développement d applications avec les bases de données

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Paradox 9. Guide de l utilisateur jpdox Web Utilities

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Plan. Accès aux données dans le framework.net. ADO.NET Entity Framework LINQ ADO.NET ADO.NET. 1. ADO.NET Mode connecté Mode non connecté

Présentation Windows Azure Hadoop Big Data - BI

PHP 5. La base de données MySql. A. Belaïd 1

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Gestion des utilisateurs et de leurs droits

FileMaker 10. Guide ODBC et JDBC

Exploitation de bases de données relationnelles et orientées objet IFT287

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Le langage SQL (première partie) c Olivier Caron

Mise en oeuvre d'une base de données mono-utilisateur avec SQLite

SQL Historique

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Bases de données relationnelles

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Introduction aux Bases de Données Relationnelles Conclusion - 1

[BASE DE DONNEES MULTIMEDIA]

1. Base de données SQLite

MySQL avec Mac OS X. Quelques manipulations avec le terminal sont nécessaires si une version de MySQL est déjà lancée:

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Ora2Pg. Présentation, bonnes pratiques et futur du projet

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Corrigé des exercices sur les références

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Gestion de base de données

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

CHAPITRE 1 ARCHITECTURE

Bases de Données Réparties

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Pratique et administration des systèmes

Une introduction à Java

PDO : PHP Data Object 1/13

Transcription:

LOG660 - Bases de données de haute performance Interface de programmation Application / BD Hiver 2011 C. Desrosiers Département de génie logiciel et des TI

Interface entre SQL et un programme SQL incomplet Défaut d'impédance (impedance mismatch) modèle de données BD modèle de données du langage de programmation Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 2

Interface programmatique (Call-Level Interface - SQL/CLI) API spécifique au SGBD e.g. Oracle Call Interface (OCI) non portable API normalisée standard de facto ODBC développé par Microsoft pour le C pilote ODBC pour client/serveur SQL/CLI de SQL:1999 inspirée de ODBC JDBC pour Java Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 3

SQL enchâssé (Embedded SQL) Code SQL dans le source du langage hôte Syntaxe spéciale Pré-compilation Oracle : pro*c/c ++, pro*cobol,, SQLJ Moins portable pré-compilateur spécifique au SGBD traduit en API du SGBD SQLJ (partie 0) traduit en API standard JDBC Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 4

Extension procédurale à SQL (Persistent Stored Modules - SQL/PSM) SQL + structures de contrôle procédures, fonctions, packages support direct des types SQL pour les variables exécution au niveau serveur de BD Oracle PL/SQL Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 5

Bloc PL/SQL [DECLARE déclaration [déclaration]...] BEGIN séquenceenoncés [EXCEPTION exception_énoncé [exception_énoncé]...] END Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 6

Exécution d un bloc sous SQL*plus SQL> DECLARE 2 laquantitéenstock Article.quantitéEnStock%TYPE; 3 BEGIN 4 SELECT quantitéenstock INTO laquantitéenstock 5 FROM Article 6 WHERE noarticle = 10; 7 IF laquantitéenstock = 0 THEN 8 DBMS_OUTPUT.PUT_LINE('L article est en rupture de stock'); 9 ELSE 10 DBMS_OUTPUT.PUT('Quantité en stock :'); 11 DBMS_OUTPUT.PUT_LINE(laQuantitéEnStock); 12 END IF; 13 EXCEPTION 14 WHEN NO_DATA_FOUND THEN 15 DBMS_OUTPUT.PUT_LINE('Numéro d article inexistant'); 16 WHEN OTHERS THEN 17 RAISE_APPLICATION_ERROR(-20001,'Erreur soulevée par le SELECT'); 18 END; 19 / Quantité en stock :20 PL/SQL procedure successfully completed. Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 7

Déclaration de variables PL/SQL (DECLARE) lenoclient lenoclient Client.noClient%TYPE; INTEGER; Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 8

Transfert d'une valeur de colonne d'un SELECT dans une variable (clause INTO) SELECT INTO FROM WHERE noclient, datecommande lenoclient, ladatecommande Commande nocommande = lenocommande; Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 9

Affectation en PL/SQL laquantitéenattente:= laquantitécommandée -laquantitélivrée; Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 10

Structure de contrôle IF IF (laquantitélivrée IS NULL) THEN DBMS_OUTPUT.PUT_LINE(' livraison en attente'); ELSE laquantitéenattente:= laquantitécommandée -laquantitélivrée; IF (laquantitéenattente = 0) THEN DBMS_OUTPUT.PUT_LINE(' livraison complétée'); ELSE DBMS_OUTPUT.PUT (' quantité en attente :'); DBMS_OUTPUT.PUT_LINE(laQuantitéEnAttente); END IF ; END IF ; Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 11

Boucles (LOOP, FOR, WHILE) LOOP séquenceenoncés END LOOP ; FOR indice IN [REVERSE] valeurinitiale..valeurfinale LOOP séquenceenoncés END LOOP ; WHILE condition LOOP séquenceenoncés END LOOP ; Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 12

Traitement d'exception (EXCEPTION, RAISE) Déclarer Soulever Attraper nomexception RAISE nomexception WHEN nomexception THEN séquenceénoncés EXCEPTION; Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 13

Curseur PL/SQL (CURSOR) CURSOR lignescommande(unnocommande Commande.noCommande%TYPE)IS SELECT noarticle, quantité FROM LigneCommande WHERE LigneCommande.noCommande = unnocommande ; OPEN lignescommande(lenocommande); -- Le OPEN ouvre le CURSOR en lui passant les paramètres LOOP FETCH lignescommande INTO lenoarticle, laquantitécommandée; -- Le FETCH retourne la ligne suivante EXIT WHEN lignescommande%notfound; -- %NOTFOUND est un attribut du CURSOR qui permet de déterminer -- si le FETCH a atteint la fin de la table END LOOP; -- Le CLOSE ferme le CURSOR CLOSE lignescommande; Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 14

Boucle FOR pour curseur PL/SQL FOR uneligne IN lignescommande(lenocommande) LOOP DBMS_OUTPUT.PUT('noArticle :'); DBMS_OUTPUT.PUT(uneLigne.noArticle); DBMS_OUTPUT.PUT(' quantité commandée:'); DBMS_OUTPUT.PUT(uneLigne.quantité); -- Chercher la quantité déjà livrée SELECT SUM(quantitéLivrée) INTO laquantitélivrée FROM DétailLivraison WHERE noarticle = uneligne.noarticle AND nocommande = lenocommande ; IF (laquantitélivrée IS NULL) THEN DBMS_OUTPUT.PUT_LINE(' livraison en attente'); ELSE laquantitéenattente:= uneligne.quantité -laquantitélivrée; IF (laquantitéenattente = 0) THEN DBMS_OUTPUT.PUT_LINE(' livraison complétée'); ELSE DBMS_OUTPUT.PUT (' quantité en attente :'); DBMS_OUTPUT.PUT_LINE(laQuantitéEnAttente); END IF ; END IF ; END LOOP; Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 15

Procédures et fonctions PL/SQL stockées SQL> CREATE FUNCTION fquantitéenstock 2 (unnoarticle Article.noArticle%TYPE) 3 RETURN Article.quantitéEnStock%TYPE IS 4 5 unequantitéenstock Article.quantitéEnStock%TYPE; 6 BEGIN 7 SELECT quantitéenstock 8 INTO unequantitéenstock 9 FROM Article 10 WHERE noarticle = unnoarticle; 11 RETURN unequantitéenstock; 12 END fquantitéenstock; 13 14 / Function created. SQL> select fquantitéenstock(10) from dual; FQUANTITÉENSTOCK(10) -------------------- 10 Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 16

Procédure stockée SQL> CREATE PROCEDURE pmodifierquantitéenstock 2 (unnoarticle Article.noArticle%TYPE, 3 nouvellequantitéenstock Article.quantitéEnStock%TYPE) IS 4 BEGIN 5 UPDATE Article 6 SET quantitéenstock = nouvellequantitéenstock 7 WHERE noarticle = unnoarticle; 8 END pmodifierquantitéenstock; 9 / Procedure created. SQL> EXECUTE pmodifierquantitéenstock(10,20); PL/SQL procedure successfully completed. SQL> SELECT * FROM Article WHERE noarticle = 10; NOARTICLE DESCRIPTION PRIXUNITAIRE QUANTITÉENSTOCK ---------- -------------------- ------------ --------------- 10 Cèdre en boule 10,99 20 Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 17

Privilèges dans une routine stockée Privilèges de l'appelant (invoker rights) CREATE PROCEDURE pmodifierquantitéenstock (unnoarticle Article.noArticle%TYPE, nouvellequantitéenstock Article.quantitéEnStock%TYPE) AUTHID CURRENT_USER IS BEGIN UPDATE Article SET quantitéenstock = nouvellequantitéenstock WHERE noarticle = unnoarticle; END pmodifierquantitéenstock; Privilèges de la routine (definer rights) privilèges du créateur par défaut Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 18

Exemple privilège de l appelant SQL> connect godin/oracle Connected. SQL> CREATE OR REPLACE PROCEDURE pmodifierquantitéenstock 2 (unnoarticle Article.noArticle%TYPE, 3 nouvellequantitéenstock Article.quantitéEnStock%TYPE) 4 AUTHID CURRENT_USER IS 5 BEGIN 6 UPDATE Article 7 SET quantitéenstock = nouvellequantitéenstock 8 WHERE noarticle = unnoarticle; 9 END pmodifierquantitéenstock; 10 / Procedure created. SQL> grant execute on pmodifierquantitéenstock to public; Grant succeeded. SQL> connect test/oracle Connected. SQL> EXECUTE godin.pmodifierquantitéenstock (10,500); PL/SQL procedure successfully completed. SQL> select * from article; NOARTICLE DESCRIPTION PRIXUNITAIRE QUANTITÉENSTOCK ---------- -------------------- ------------ --------------- 10 Cèdre en boule 10,99 500 20 Sapin 12,99 10 SQL> select * from godin.article; select * from godin.article * ERROR at line 1: ORA-00942: table or view does not exist Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 19

Exemple privilège du créateur SQL> connect godin/oracle Connected. SQL> CREATE OR REPLACE PROCEDURE pmodifierquantitéenstock 2 (unnoarticle Article.noArticle%TYPE, 3 nouvellequantitéenstock Article.quantitéEnStock%TYPE) 4 IS 5 BEGIN 6 UPDATE Article 7 SET quantitéenstock = nouvellequantitéenstock 8 WHERE noarticle = unnoarticle; 9 END pmodifierquantitéenstock; 10 / Procedure created. SQL> grant execute on pmodifierquantitéenstock to public; Grant succeeded. SQL> connect test/oracle Connected. SQL> EXECUTE godin.pmodifierquantitéenstock (10,700); PL/SQL procedure successfully completed. SQL> select * from article; NOARTICLE DESCRIPTION PRIXUNITAIRE QUANTITÉENSTOCK ---------- -------------------- ------------ --------------- 10 Cèdre en boule 10,99 500 20 Sapin 12,99 10 Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 20

Exemple privilège du créateur (suite) SQL> select * from godin.article; select * from godin.article * ERROR at line 1: ORA-00942: table or view does not exist SQL> connect godin/oracle Connected. SQL> select * from article; NOARTICLE DESCRIPTION PRIXUNITAIRE QUANTITÉENSTOCK ---------- -------------------- ------------ --------------- 10 Cèdre en boule 10,99 700 20 Sapin 12,99 10 40 Épinette bleue 25,99 10 50 Chêne 60 Érable argenté 22,99 15,99 10 10 70 Herbe à puce 80 Poirier 10,99 26,99 10 10 81 Catalpa 90 Pommier 25,99 25,99 10 10 95 Génévrier 15,99 10 10 rows selected. Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 21

Package PL/SQL CREATE PACKAGE nompaquetage AS listedessignaturesdesfonctions&procédures END nompaquetage ; CREATE PACKAGE BODY nompaquetage AS délaration [déclaration] BEGIN séquenceénoncésinitialisation END nompaquetage; nompaquetage.nomobjet Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 22

JDBC API standard pour JAVA http://java.sun.com/products/jdbc/ Ensemble de classes Besoin d installer un pilote JDBC dans l environnement JAVA Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 23

Architecture pour les pilotes JDBC Application Java (import java.sql.*) API JDBC Type 1 Passerelle JDBC- ODBC Pilote ODBC (e.g. pilote ODBC Oracle) Type 2 Partie Java API client du SGBD (e.g. ocijdbc8.dll pour Oracle) Type 3 Pilote JDBC générique Type 4 Pilote JDBC tout Java (e.g. Oracle thin) Type? Oracle serverside thin et internal driver Serveur JDBC Serveur de BD Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 24

Chargement d'un pilote JDBC et établissement d'une connexion Charger les pilotes JDBC d Oracle Class.forName ("oracle.jdbc.driver.oracledriver"); Établir une connexion avec le pilote OCI8 pour un serveur Oracle local Connection uneconnection = DriverManager.getConnection ("jdbc:oracle:oci8:@", "toto", "secret"); Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 25

Création d un énoncé SQL (Statement) Statement unenoncésql = uneconnection.createstatement (); <<Interface>> Statement executequery(arg0 : S tring) : ResultSet executeupdate(arg0 : St ring) : int close() : void getmaxfieldsize() : int setmaxfieldsize(arg0 : int) : void getmaxrows() : int setmaxrows(arg0 : int) : void setescapeprocessing(arg0 : boolean) : void getquerytimeout() : int setquerytimeout(arg0 : int) : void cancel() : void getw arnings() : SQLWarning clearwarnings() : void setcursorname(arg0 : String) : void execute(arg0 : String) : boolean getresultset() : ResultSet getupdatecount() : int getmoreresults() : boolean setfetchdirection(arg0 : int) : void getfet chdirection() : int setfetchsize(arg0 : int) : void getfetchsize() : int getresultsetconcurrency() : int getresultsettype() : int addbatch(arg0 : String) : void clearbatch() : void executebatch() : int[] getconnection() : Connection Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 26

Exécution d'une opération de mise à jour (INSERT, DELETE, UPDATE) import java.sql.*; class ClientInsertJDBC { public static void main (String args []) throws SQLException, ClassNotFoundException, java.io.ioexception { // Charger le pilote JDBC d'oracle Class.forName ("oracle.jdbc.driver.oracledriver"); // Connexion à une BD Connection uneconnection = DriverManager.getConnection ("jdbc:oracle:oci8:@", "godin", "oracle"); // Création d'un énoncé associé à la Connection Statement unenoncésql = uneconnection.createstatement (); // Insertion d'une ligne dans la table Client int n = unenoncésql.executeupdate ("INSERT INTO CLIENT " + "VALUES (100, 'G. Lemoyne-Allaire', '911')"); System.out.println ("Nombre de lignes inserees:" + n); } } // Fermeture de l'énoncé et de la connexion unenoncésql.close(); uneconnection.close(); Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 27

Exécution d'un SELECT (ResultSet) Début analogue à l'exemple précédent // Création d'un énoncé associé à la Connexion Statement unenoncésql = uneconnection.createstatement(); // Exécution d'un SELECT ResultSet résultatselect = unenoncésql.executequery ("SELECT noclient, nomclient "+ "FROM CLIENT " + "WHERE noclient > 40"); // Itérer sur les lignes du résultat du SELECT et extraire les valeurs // des colonnes dans des variables JAVA } } while (résultatselect.next ()){ int noclient = résultatselect.getint ("noclient"); String nomclient = résultatselect.getstring ("nomclient"); System.out.println ("Numéro du client:" + noclient); System.out.println ("Nom du client:" + nomclient); } Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 28

Support des types SQL:1999 sous JDBC 2 CREATE TABLE tableblob ( idblob INTEGER PRIMARY KEY, imageblob) // Chercher le BLOB locator ResultSet unresultset = unenoncésql.executequery ("SELECT * FROM tableblob WHERE idblob = 1"); if (unresultset.next()){ int idblob = unresultset.getint(1); Blob unblob = unresultset.getblob(2); // Chercher la taille du BLOB et l'afficher int taille = (int)unblob.length(); System.out.println("Taille du BLOB" + taille); // Lire le BLOB dans un tableau d'octets byte octets[] = unblob.getbytes(1, taille); // Créer un fichier contenant les octets lus FileOutputStream unfichier = new FileOutputStream("C:/forte4j/Development/ExemplesJDBC/CopieCoq1.gif"); unfichier.write(octets); unfichier.close(); Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 29

Compilation et exécutions multiples avec la classe PreparedStatement Compilation + exécution combinée au executequery Statement unenoncésql = uneconnection.createstatement(); ResultSet résultatselect = unenoncésql.executequery ("SELECT noclient, nomclient "+ "FROM CLIENT " + "WHERE noclient > 40"); Compilation au preparestatement PreparedStatement unenoncésql = uneconnection.preparestatement ("SELECT noclient, nomclient "+ "FROM CLIENT " + "WHERE noclient > 40"); ResultSet résultatselect = unenoncésql.executequery(); Compilation avec paramètres PreparedStatement unenoncésql = uneconnection.preparestatement ("SELECT noclient, nomclient "+ "FROM CLIENT " + "WHERE noclient >?"); unenoncésql.setint(1,40); ResultSet résultatselect = unenoncésql.executequery(); Statement PreparedStatement CallableStatement Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 30

Exécution en lot (batch) sous JDBC 2 // Création d'un PreparedStatement associé à la Connection PreparedStatement unenoncésql = uneconnection.preparestatement ("INSERT INTO Client VALUES(?,?,?)"); // Ajout d'un INSERT dans le lot unenoncésql.setint(1,90); unenoncésql.setstring(2,"edgar Degas"); unenoncésql.setstring(3,"(222)222-2222"); unenoncésql.addbatch(); // Ajout d'un autre INSERT dans le lot unenoncésql.setint(1,100); unenoncésql.setstring(2,"claude Monet"); unenoncésql.setstring(3,"(111)111-1111"); unenoncésql.addbatch(); // Exécution du lot en un appel int [] résultats = unenoncésql.executebatch(); Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 31

Exécution d'une procédure ou fonction stockée (CallableStatement) // Création d'un appel de fonction associé à la Connection CallableStatement uncall = uneconnection.preparecall("{? = call fquantitéenstock(?)}"); // Spécification du paramètre d'entrée uncall.setint(2,10); // Inscription de la sortie uncall.registeroutparameter(1, java.sql.types.integer); // Exécution de l'appel uncall.execute(); // Récupération de la sortie int laquantite = uncall.getint(1); System.out.println("Quantité en stock :"+laquantite); }; uncall.close(); uneconnection.close(); Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 32

Appel de procédure stockée CallableStatement uncall = uneconnection.preparecall("{call pmodifierquantitéenstock(?,?)}"); // Spécification des paramètres d'entrée uncall.setint(1,10); uncall.setint(2,20); // Exécution de l'appel uncall.execute(); uncall.close(); uneconnection.close(); Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 33

Gestion des transactions Par défaut : auto-commit Pour modifier uneconnection.setautocommit(false); Pour un commit explicite : uneconnection.commit(); Pour un rollback : uneconnection.rollback(); Département de génie logiciel et des TI R. Godin, C. Desrosiers - Hiver 2011 34