1 / 19

Développement des Applications des Bases de Données

Développement des Applications des Bases de Données. Chapitre 6, Sections 6.3.6--6.5. Survol. JDBC SQLJ Procédures stockées. JDBC: Examen des Metadonnées. Les objets de la classe DatabaseMetaData donnent des informations au sujet du SGBD et du catalogue de la base de données.

Download Presentation

Développement des Applications des Bases de Données

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Développement des Applications des Bases de Données Chapitre 6, Sections 6.3.6--6.5

  2. Survol • JDBC • SQLJ • Procédures stockées

  3. JDBC: Examen des Metadonnées Les objets de la classe DatabaseMetaData donnent des informations au sujet du SGBD et du catalogue de la base de données. DatabaseMetaData md = con.getMetaData(); // imprime de l’info au sujet du driver: System.out.println(“Name:” + md.getDriverName() +“version: ” + md.getDriverVersion());

  4. JDBC: Examen des Metadonnées (Suite) • Un objet de la classe DatabaseMetaData contient 134 méthodes!!! - getCatalog() - getIndexInfo() - getTables() - getMaxConnections() etc.

  5. JDBC: Examen des Metadonnées (Suite) DatabaseMetaData md=con.getMetaData(); ResultSet trs=md.getTables(null,null,null,null); String tableName; While(trs.next()) { tableName = trs.getString(“TABLE_NAME”); System.out.println(“Table: “ + tableName); //print all attributes ResultSet crs = md.getColumns(null,null,tableName, null); while (crs.next()) { System.out.println(crs.getString(“COLUMN_NAME” + “ “); } }

  6. Un Exemple (Semi-)Complet Connection con = // connecter DriverManager.getConnection(url, ”login", ”pass"); Statement stmt = con.createStatement(); String query = "SELECT name, rating FROM Sailors"; ResultSet rs = stmt.executeQuery(query); try { // handle exceptions // boucle parcourant les tuples du résultat while (rs.next()) { String s = rs.getString(“name"); Int n = rs.getFloat(“rating"); System.out.println(s + " " + n); } } catch(SQLException ex) { System.out.println(ex.getMessage () + ex.getSQLState () + ex.getErrorCode ()); }

  7. SQLJ • Complémente JDBC avec un modèle de requêtes (semi-)statiques: le compilateur peut faire une série de tâches: vérifier la syntaxe, les types des données, la conformité de la requête avec le schéma • Exemple: #sql books = { SELECT name, rating INTO :name, :rating FROM Books WHERE sid = :sid }; • Comparer avec ce qui se fait en JDBC:sid=rs.getInt(1);if (sid==1) {sname=rs.getString(2);}else { sname2=rs.getString(2);} • SQLJ fait partie du standard SQL, contrairement au SQL imbriqué qui est spécifique à chaque vendeur.

  8. Exemple de Code SQLJ Int sid; String name; Int rating; … // itérateur nominal #sql iterator Sailors(Int sid, String name, Int rating); Sailors sailors; // Supposez que l’application a déjà fixé la valeur de ‘rating’ #sailors = { SELECT sid, sname INTO :sid, :nameFROM Sailors WHERE rating = :rating }; // puise les résultats while (sailors.next()) { System.out.println(sailors.sid + “ “ + sailors.sname)); } sailors.close();

  9. Iterateurs SQLJ Deux type d’itérateurs (“curseurs”): • Itérateur nominal • Mentionne le nom de la variable ainsi que son type et permet de puiser les valeurs des colonnes par les noms. • Exemple: transparent précédent. • Itérateur positionnel • Mentionne seulement le type de la variable et utilise FETCH .. INTO pour puiser les valeurs des colonnes:#sql iterator Sailors(Int, String, Int);Sailors sailors;#sailors = …while (true) {#sql {FETCH :sailors INTO :sid, :name} ; if (sailors.endFetch()) { break; } // traiter les valeurs obtenues pour sid et sname}

  10. Procédures Stockées • Définition d’une procédure stockée: • Programme exécuté à travers une seule instruction SQL • Exécutée dans l’espace des processus du serveur • Avantages: • Peut encapsuler la logique de l’application et en même temps être près de la source de données • Réutilise la logique de l’application par différents utilisateurs • Retourne les données en évitant l’utilisation des curseurs

  11. Procédures Stockées: Exemples CREATE PROCEDURE ShowNumReservationsSELECT S.sid, S.sname, COUNT(*)FROM Sailors S, Reserves RWHERE S.sid = R.sidGROUP BY S.sid, S.sname Les procédures stockées peuvent avoir des paramètres: • Trois différents modes: IN, OUT, INOUT CREATE PROCEDURE IncreaseRating(IN sailor_sid INTEGER, IN increase INTEGER) UPDATE Sailors SET rating = rating + increaseWHERE sid = sailor_sid

  12. Procédures Stockées: Exemples (Suite) Les procédures stockées ne doivent pas nécessairement être écrites en SQL: CREATE PROCEDURE TopSailors(IN num INTEGER) LANGUAGE JAVA EXTERNAL NAME “file:///c:/storedProcs/rank.jar”

  13. Exécution des Procédures Stockées EXEC SQL BEGIN DECLARE SECTION Int sid; Int rating; EXEC SQL END DECLARE SECTION // Exécution de la procédure stockée EXEC CALL IncreaseRating(:sid,:rating);

  14. JDBC: CallableStatement cstmt=con.prepareCall(“{call ShowSailors}); ResultSet rs = cstmt.executeQuery(); while (rs.next()) { … } SQLJ: #sql iterator ShowSailors(…); ShowSailors showsailors; #sql showsailors={CALL ShowSailors}; while (showsailors.next()) { … } Exécution des Procédures Stockées (Suite)

  15. SQL/PSM La plupart des SGBDs permettent aux utilisateurs de stocker des procédures en usant d’un language simple et tout usage proche de SQL  Le standard SQL/PSM est représentatif de tels langages. Déclaration d’une procédure stockée: CREATE PROCEDURE name(p1, p2, …, pn) déclarations de variables locales code de la procédure; Declaration d’une fonction: CREATE FUNCTION name (p1, …, pn) RETURNS Type de données se SQLdéclarations de variables locales code de la fonction;

  16. Principaux Éléments de SQL/PSM CREATE FUNCTION rate Sailor (IN sailorId INTEGER) RETURNS INTEGER DECLARE rating INTEGER DECLARE numRes INTEGER SET numRes = (SELECT COUNT(*) FROM Reserves R WHERE R.sid = sailorId) IF (numRes > 10) THEN rating =1; ELSE rating = 0; END IF; RETURN rating;

  17. Principaux Éléments de SQL/PSM (Suite) • Variables locales (DECLARE) • Valeur de retour (RETURNS) des fonctions (FUNCTION) • Assignement des variables avec SET • Branches et boucles: • IF (condition) THEN instructions;ELSEIF (condition) instructions;… ELSE instructions; END IF; • LOOP instructions; END LOOP • Des requêtes peuvent faire partie des expressions • Les curseurs peuvent être naturellement utilisés sans “EXEC SQL”

  18. Résumé • Le SQL imbriqué permet l’exécution de requêtes paramétriques et statiques au sein d’un langage hôte • Le SQL dynamique permet l’exécution de requêtes ad-hoc au sein d’un langage hôte • Le mécanisme de curseur permet de puiser un tuple à la fois et de résoudre l’ ’’impedance mismatch’’ entre la langage hôte et SQL • Des APIs tels que JDBC introduisent un niveau d’abstraction entre l’application et le SGBD

  19. Résumé (Suite) • SQLJ est un modèle statique de requêtes vérifiées pendant la compilation • Les procédures stockées exécutent la logique de l’application directement sur le serveur • SQL/PSM est un standard pour l’encodage des procédures stockées

More Related