02/06/2015© Robert Godin. Tous droits réservés.1 5 Interface entre SQL et un programme n SQL incomplet n Défaut d'impédance (impedance mismatch) – modèle de données BD – modèle de données du langage de programmation
02/06/2015© Robert Godin. Tous droits réservés.2 Interface programmatique (Call- Level Interface - SQL/CLI) n API spécifique au SGBD – e.g. Oracle Call Interface – non portable n API normalisée – standard de facto ODBC n développé par Microsoft pour le C – pilote ODBC pour client/serveur – SQL/CLI de SQL:1999 inspirée de ODBC – JDBC pour Java
02/06/2015© Robert Godin. Tous droits réservés.3 SQL enchâssé (Embedded SQL) n Code SQL dans le source du langage hôte n Syntaxe spéciale n Pré-compilation – Oracle : pro*C/C ++, pro*COBOL, …, JSQL n Moins portable – pré-compilateur spécifique au SGBD – traduit en API du SGBD n SQLJ (partie 0) traduit en API standard JDBC
02/06/2015© Robert Godin. Tous droits réservés.4 Extension procédurale à SQL (Persistent Stored Modules - SQL/PSM) n SQL + – structures de contrôle – procédures, fonctions, packages – support direct des types SQL pour les variables – exécution au niveau serveur de BD n Oracle – PL/SQL
02/06/2015© Robert Godin. Tous droits réservés.5 Routine invoquée en SQL n Stockée dans le schéma relationnel n Exécutée au niveau du serveur de BD n Langage – SQL/PSM – SQLJ (partie 1) : routines stockées en Java
02/06/2015© Robert Godin. Tous droits réservés.6 5.1SQL enchâssé n Syntaxe n Insertion d'une ligne dans la table Client
02/06/2015© Robert Godin. Tous droits réservés.7 Variables partagées n Déclaration n Utilisation de variables partagées n Vérification d ’exceptions avec SQLSTATE
02/06/2015© Robert Godin. Tous droits réservés SELECT à ligne unique
02/06/2015© Robert Godin. Tous droits réservés Curseur SQL
02/06/2015© Robert Godin. Tous droits réservés Mises à jour par curseur
02/06/2015© Robert Godin. Tous droits réservés SQL dynamique
02/06/2015© Robert Godin. Tous droits réservés Connexion (CONNECT)
02/06/2015© Robert Godin. Tous droits réservés.13 Suite n Syntaxe du CONNECT n Exemple avec SQL enchâssé en C n Pour passer d ’un connexion à l ’autre n Pour terminer une connexion
02/06/2015© Robert Godin. Tous droits réservés Introduction à l'extension procédurale PL/SQL D'Oracle
02/06/2015© Robert Godin. Tous droits réservés.15
02/06/2015© Robert Godin. Tous droits réservés.16 Compilation et stockage dans le schéma avec SQL*plus
02/06/2015© Robert Godin. Tous droits réservés.17 Appel de la procédure avec SQL*plus
02/06/2015© Robert Godin. Tous droits réservés Bloc PL/SQL
02/06/2015© Robert Godin. Tous droits réservés.19 Exécution d ’un bloc sous SQL*plus
02/06/2015© Robert Godin. Tous droits réservés Déclaration de variables PL/SQL (DECLARE)
02/06/2015© Robert Godin. Tous droits réservés Transfert d'une valeur de colonne d'un SELECT dans une variable (clause INTO)
02/06/2015© Robert Godin. Tous droits réservés Affectation en PL/SQL
02/06/2015© Robert Godin. Tous droits réservés Structure de contrôle IF
02/06/2015© Robert Godin. Tous droits réservés Boucles (LOOP, FOR, WHILE)
02/06/2015© Robert Godin. Tous droits réservés Traitement d'exception (EXCEPTION, RAISE) n Déclarer n Soulever n Attraper
02/06/2015© Robert Godin. Tous droits réservés Curseur PL/SQL (CURSOR)
02/06/2015© Robert Godin. Tous droits réservés.27 Boucle FOR pour curseur PL/SQL
02/06/2015© Robert Godin. Tous droits réservés Procédures et fonctions PL/SQL stockées
02/06/2015© Robert Godin. Tous droits réservés.29 Procédure stockée
02/06/2015© Robert Godin. Tous droits réservés PRIVILÈGES DANS UNE ROUTINE STOCKÉE n Privilèges de l'appelant (invoker rights) n Privilèges de la routine (definer rights) – privilèges du créateur – par défaut
02/06/2015© Robert Godin. Tous droits réservés.31 Exemple privilège de l’appelant
02/06/2015© Robert Godin. Tous droits réservés.32 Exemple privilège du créateur
02/06/2015© Robert Godin. Tous droits réservés.33 Exemple privilège du créateur (suite)
02/06/2015© Robert Godin. Tous droits réservés Package PL/SQL
02/06/2015© Robert Godin. Tous droits réservés Déboguage du code PL/SQL n SHOW ERRORS sous SQL*plus n Package DBMS_OUTPUT n Table USER_SOURCE dans la métabase
02/06/2015© Robert Godin. Tous droits réservés JDBC n API standard pour JAVA n n Ensemble de classes n Besoin d ’installer un pilote JDBC dans l ’environnement JAVA
02/06/2015© Robert Godin. Tous droits réservés Architecture pour les pilotes JDBC
02/06/2015© Robert Godin. Tous droits réservés Chargement d'un pilote JDBC (DriverManager) et établissement d'une connexion (Connection) n Charger les pilotes JDBC d ’ Oracle – N.B. La librairie des pilotes Oracle doit être accessible à la machine virtuelle Java. Voir – Avec JDK 1.1 (problème avec bloc statique) utiliser : n DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver()); n Établir une connexion avec le pilote OCI8 pour un serveur Oracle local – OCI8 est un pilote de type 2 n Voir aussi interface javax.sql.DataSource (chap. 15) – package optionnel de JDBC 2 – meilleure transparence, plus grande versatilité – maintenant préférée à DriverManager – obligatoire avec J2EE
02/06/2015© Robert Godin. Tous droits réservés Création d ’un énoncé SQL (Statement)
02/06/2015© Robert Godin. Tous droits réservés Exécution d'une opération de mise à jour (INSERT, DELETE, UPDATE)
02/06/2015© Robert Godin. Tous droits réservés Exécution d'un SELECT (ResultSet)
02/06/2015© Robert Godin. Tous droits réservés ResultSet défilable (scrollable), modifiable (updatable), sensible (sensitive) - JDBC2
02/06/2015© Robert Godin. Tous droits réservés.43 ResultSet modifiable (updatable) mises à jour susceptibles d ’être vues pas le ResultSet
02/06/2015© Robert Godin. Tous droits réservés Support des types SQL:1999 sous JDBC 2
02/06/2015© Robert Godin. Tous droits réservés Exécution en lot (batch) sous JDBC 2
02/06/2015© Robert Godin. Tous droits réservés Gestion des transactions n Par défaut : auto-commit n Pour modifier n Pour un commit explicite : n Pour un rollback :
02/06/2015© Robert Godin. Tous droits réservés.47 Suite n Changer le niveau d ’isolation de défaut n Transactions réparties JDBC 2 – Java Transaction API (JTA) n interface UserTransaction – begin(), commit() – voir chap. 15
02/06/2015© Robert Godin. Tous droits réservés Gestion des exceptions n Mécanisme try/catch de JAVA
02/06/2015© Robert Godin. Tous droits réservés Utilisation de JDBC dans une applette Java n Déploiement avec le pilote thin n Contrainte de carré de sable n Exemple –
Exemple d ’applette avec pilote JDBC type 4 (thin)
02/06/2015© Robert Godin. Tous droits réservés Compilation et exécutions multiples avec la classe PreparedStatement n Compilation + exécution combinée au executeQuery n Compilation au prepareStatement n Compilation avec paramètres
02/06/2015© Robert Godin. Tous droits réservés Exécution d'une procédure ou fonction stockée (CallableStatement)
02/06/2015© Robert Godin. Tous droits réservés.53 Appel de procédure stockée
02/06/2015© Robert Godin. Tous droits réservés Accès aux méta- données (MetaData)
02/06/2015© Robert Godin. Tous droits réservés.55 DatabaseMetaData
02/06/2015© Robert Godin. Tous droits réservés SQLJ n Partie 0 de SQLJ – SQL enchâssée en Java n Partie 1 de SQLJ – Routines stockées n Partie 2 de SQLJ – Utilisation de classes Java en tant que types SQL
02/06/2015© Robert Godin. Tous droits réservés SQL enchâssé en Java (SQLJ : partie 0) n Ne vise que le statique n Traduit en JDBC n Peut combiner SQLJ et JDBC
02/06/2015© Robert Godin. Tous droits réservés.58 Variables partagées
02/06/2015© Robert Godin. Tous droits réservés CONTEXTE DE CONNEXION Contexte implicite
02/06/2015© Robert Godin. Tous droits réservés.60 Contexte explicite
02/06/2015© Robert Godin. Tous droits réservés.61 Commit explicite
02/06/2015© Robert Godin. Tous droits réservés SELECT QUI RETOURNE UN SINGLETON (CLAUSE INTO)
02/06/2015© Robert Godin. Tous droits réservés ITÉRATEUR DE RÉSULTAT SQLJ
02/06/2015© Robert Godin. Tous droits réservés.64 Mise-à-jour par itérateur
02/06/2015© Robert Godin. Tous droits réservés APPEL DE ROUTINES STOCKÉES EN SQLJ
02/06/2015© Robert Godin. Tous droits réservés INTEROPÉRABILITÉ AVEC JDBC n Création d'un contexte SQLJ à partir d'une Connection JDBC n Extraction de la Connection d'un contexte n Conversion d'un itérateur en un ResultSet JDBC n Conversion d'un ResultSet JDBC en un iterateur SQLJ
02/06/2015© Robert Godin. Tous droits réservés PROCESSUS DE TRADUCTION SQLJ
02/06/2015© Robert Godin. Tous droits réservés SQLJ partie 1: routines stokées en Java
02/06/2015© Robert Godin. Tous droits réservés.69 Déploiement Oracle n Charger le code dans un schéma n Publier sous forme de routine stockée : n Appeler la fonction en SQL