le protocole jdbc (java database connectivity)
TRANSCRIPT
![Page 1: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/1.jpg)
IS 2ASysteme dâInformation a Objets
Le protocole JDBC(Java DataBase Connectivity)
Olivier Caron
Polytech LilleAvenue Paul Langevin Cite ScientifiqueUniversite de Lille59655 Villeneuve dâAscq cedex
http://[email protected]
Olivier Caron 9 juillet 2021 1/36
![Page 2: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/2.jpg)
IS 2ASysteme dâInformation a Objets
Lâancetre ODBC
Programme ODBCselect * from personne
ODBC ODBC ODBC
Oracle Postgres Excel
Olivier Caron 9 juillet 2021 2/36
![Page 3: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/3.jpg)
IS 2ASysteme dâInformation a Objets
JDBC
⢠Langage Java (multi-plateforme :-)
⢠Interface de programmation (API)1
⢠Adopte et implemente par presque tous les constructeurs
⢠Passerelle ODBC-JDBC
1Un fichier First.java contenant les exemples JDBC du cours est disponible surmes pages webs
Olivier Caron 9 juillet 2021 3/36
![Page 4: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/4.jpg)
IS 2ASysteme dâInformation a Objets
JDBC
⢠Langage Java (multi-plateforme :-)
⢠Interface de programmation (API)1
⢠Adopte et implemente par presque tous les constructeurs
⢠Passerelle ODBC-JDBC
1Un fichier First.java contenant les exemples JDBC du cours est disponible surmes pages webs
Olivier Caron 9 juillet 2021 3/36
![Page 5: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/5.jpg)
IS 2ASysteme dâInformation a Objets
JDBC
⢠Langage Java (multi-plateforme :-)
⢠Interface de programmation (API)1
⢠Adopte et implemente par presque tous les constructeurs
⢠Passerelle ODBC-JDBC
1Un fichier First.java contenant les exemples JDBC du cours est disponible surmes pages webs
Olivier Caron 9 juillet 2021 3/36
![Page 6: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/6.jpg)
IS 2ASysteme dâInformation a Objets
JDBC
⢠Langage Java (multi-plateforme :-)
⢠Interface de programmation (API)1
⢠Adopte et implemente par presque tous les constructeurs
⢠Passerelle ODBC-JDBC
1Un fichier First.java contenant les exemples JDBC du cours est disponible surmes pages webs
Olivier Caron 9 juillet 2021 3/36
![Page 7: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/7.jpg)
IS 2ASysteme dâInformation a Objets
Des utilisations possibles des protocoles
Programme JDBCselect * from personne
ODBC JDBC ODBC
Oracle Postgres Excel
ODBC JDBC
JDBC-ODBC
...Access Access
Olivier Caron 9 juillet 2021 4/36
![Page 8: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/8.jpg)
IS 2ASysteme dâInformation a Objets
Structuration dâun programme JDBC
Votre code JavaProgramme Java
JDBC APIjava.sql.* et/ou javax.sql.*
Driver Cible
JDBC API
/usr/share/java/postgresql-jdbc4.jar Ou /usr/share/java/postgresql.jar
Base de donnĂŠes
Compilation, execution dâun programme Java-JDBC :javac progs/First.java
java -cp /usr/share/java/postgresql.jar:. progs.First
Olivier Caron 9 juillet 2021 5/36
![Page 9: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/9.jpg)
IS 2ASysteme dâInformation a Objets
Deroulement dâun programme JDBC
⢠Deroulement classique :
1 Connexion a une base2 Execution de requetes et recuperation des donnees3 Deconnexion
⢠Plein dâautres variantes (ex : acces multi-bases)
Olivier Caron 9 juillet 2021 6/36
![Page 10: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/10.jpg)
IS 2ASysteme dâInformation a Objets
Deroulement dâun programme JDBC
⢠Deroulement classique :1 Connexion a une base
2 Execution de requetes et recuperation des donnees3 Deconnexion
⢠Plein dâautres variantes (ex : acces multi-bases)
Olivier Caron 9 juillet 2021 6/36
![Page 11: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/11.jpg)
IS 2ASysteme dâInformation a Objets
Deroulement dâun programme JDBC
⢠Deroulement classique :1 Connexion a une base2 Execution de requetes et recuperation des donnees
3 Deconnexion
⢠Plein dâautres variantes (ex : acces multi-bases)
Olivier Caron 9 juillet 2021 6/36
![Page 12: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/12.jpg)
IS 2ASysteme dâInformation a Objets
Deroulement dâun programme JDBC
⢠Deroulement classique :1 Connexion a une base2 Execution de requetes et recuperation des donnees3 Deconnexion
⢠Plein dâautres variantes (ex : acces multi-bases)
Olivier Caron 9 juillet 2021 6/36
![Page 13: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/13.jpg)
IS 2ASysteme dâInformation a Objets
Deroulement dâun programme JDBC
⢠Deroulement classique :1 Connexion a une base2 Execution de requetes et recuperation des donnees3 Deconnexion
⢠Plein dâautres variantes (ex : acces multi-bases)
Olivier Caron 9 juillet 2021 6/36
![Page 14: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/14.jpg)
IS 2ASysteme dâInformation a Objets
Etablissement dâune connexion
⢠Pour se connecter a une base, il faut fournir les elements suivants :
1 Lâadresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base4 Les nom et mot de passe de lâutilisateur reference du serveur
⢠Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees
Exemple :jdbc:postgresql://serveur-etu.polytech-lille.fr/videoclub
⢠Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.
Olivier Caron 9 juillet 2021 7/36
![Page 15: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/15.jpg)
IS 2ASysteme dâInformation a Objets
Etablissement dâune connexion
⢠Pour se connecter a une base, il faut fournir les elements suivants :1 Lâadresse du serveur de base de donnees (son nom de machine)
2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base4 Les nom et mot de passe de lâutilisateur reference du serveur
⢠Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees
Exemple :jdbc:postgresql://serveur-etu.polytech-lille.fr/videoclub
⢠Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.
Olivier Caron 9 juillet 2021 7/36
![Page 16: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/16.jpg)
IS 2ASysteme dâInformation a Objets
Etablissement dâune connexion
⢠Pour se connecter a une base, il faut fournir les elements suivants :1 Lâadresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )
3 Le nom de la base4 Les nom et mot de passe de lâutilisateur reference du serveur
⢠Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees
Exemple :jdbc:postgresql://serveur-etu.polytech-lille.fr/videoclub
⢠Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.
Olivier Caron 9 juillet 2021 7/36
![Page 17: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/17.jpg)
IS 2ASysteme dâInformation a Objets
Etablissement dâune connexion
⢠Pour se connecter a une base, il faut fournir les elements suivants :1 Lâadresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base
4 Les nom et mot de passe de lâutilisateur reference du serveur
⢠Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees
Exemple :jdbc:postgresql://serveur-etu.polytech-lille.fr/videoclub
⢠Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.
Olivier Caron 9 juillet 2021 7/36
![Page 18: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/18.jpg)
IS 2ASysteme dâInformation a Objets
Etablissement dâune connexion
⢠Pour se connecter a une base, il faut fournir les elements suivants :1 Lâadresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base4 Les nom et mot de passe de lâutilisateur reference du serveur
⢠Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees
Exemple :jdbc:postgresql://serveur-etu.polytech-lille.fr/videoclub
⢠Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.
Olivier Caron 9 juillet 2021 7/36
![Page 19: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/19.jpg)
IS 2ASysteme dâInformation a Objets
Etablissement dâune connexion
⢠Pour se connecter a une base, il faut fournir les elements suivants :1 Lâadresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base4 Les nom et mot de passe de lâutilisateur reference du serveur
⢠Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees
Exemple :jdbc:postgresql://serveur-etu.polytech-lille.fr/videoclub
⢠Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.
Olivier Caron 9 juillet 2021 7/36
![Page 20: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/20.jpg)
IS 2ASysteme dâInformation a Objets
Etablissement dâune connexion
⢠Pour se connecter a une base, il faut fournir les elements suivants :1 Lâadresse du serveur de base de donnees (son nom de machine)2 Le type du serveur de base de donnees (postgresql, mysql, oracle,. . . )3 Le nom de la base4 Les nom et mot de passe de lâutilisateur reference du serveur
⢠Les elements 1 a 3 seront fournis via une URL de la forme :jdbc:typeServeur://adresseServeur/nomBaseDonnees
Exemple :jdbc:postgresql://serveur-etu.polytech-lille.fr/videoclub
⢠Ces donnees seront idealement externalisees du code source Javadans un fichier de proprietes.
Olivier Caron 9 juillet 2021 7/36
![Page 21: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/21.jpg)
IS 2ASysteme dâInformation a Objets
Fichier de proprietes
⢠Un fichier de proprietes permet dâavoir un code evolutif sansrecompilation
⢠Soit le fichier de proprietes de nom âdatabase.propertiesâ :
jdbc . serverType=pos tg resq ljdbc . serverHost=serveur âetu . poly tech â l i l l e . f rjdbc .dbName= t e s tjdbc . user=adminjdbc . password=secre t
Olivier Caron 9 juillet 2021 8/36
![Page 22: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/22.jpg)
IS 2ASysteme dâInformation a Objets
Exemple dâune connexion JDBC (1/2)
package progs ;
import java . sq l . * ;import java . i o . * ;import java . u t i l . P rope r t i es ;import javax . sq l . * ;import javax . sq l . rowset . * ;
public class F i r s t {public s t a t i c void main ( S t r i n g args [ ] ) {
t ry {Proper t i es props= new Proper t i es ( ) ;F i le InputSt ream i n =new Fi le InputSt ream ( â database . p r o p e r t i e s â ) ;props . load ( i n ) ;S t r i n g u r l = â jdbc : â +props . getProper ty ( â jdbc . serverType â ) + â : / / â +
props . ge tProper ty ( â jdbc . serverHost â )+ â / â +props . ge tProper ty ( â jdbc .dbNameâ ) ;
Olivier Caron 9 juillet 2021 9/36
![Page 23: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/23.jpg)
IS 2ASysteme dâInformation a Objets
Exemple dâune connexion JDBC (2/2)
1 S t r i n g user=props . ge tProper ty ( â jdbc . user â ) ;2 S t r i n g password=props . ge tProper ty ( â jdbc . password â ) ;34 Connection db = DriverManager . getConnect ion ( u r l , user , password ) ;5 System . out . p r i n t l n ( â Connexion e t a b l i e â ) ;6 . . .7 } catch ( Fi leNotFoundExcept ion e1 ) {8 System . e r r . p r i n t l n ( â F i c h i e r de p r o p r i e t es non t rouv e â ) ;9 } catch ( IOExcept ion e2 ) {
10 System . e r r . p r i n t l n ( â Er reur l e c t u r e f i c h i e r p r o p r i e t e â ) ;11 } catch ( SQLException e3 ) {12 System . e r r . p r i n t l n ( â Er reur SQLâ ) ;13 e3 . p r in tS tackTrace ( ) ;14 }15 }
Olivier Caron 9 juillet 2021 10/36
![Page 24: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/24.jpg)
IS 2ASysteme dâInformation a Objets
Lâinterface PreparedStatement
⢠Le programme precedent a permis dâobtenir une variable db de typeConnection (ligne 4, diapositive precedente).
⢠Un objet de type PreparedStatement est necessaire pourdefinir des requetes SQL, fournir des parametres puis executer etrecevoir eventuellement des donnees issues de lâexecution de cesrequetes.
⢠Les donnees issues de requetes select sont stockees dans desobjets de type ResultSet.
⢠La fermeture dâun PreparedStatement engendre la fermetureautomatique de tous les ResultSet associes.
Olivier Caron 9 juillet 2021 11/36
![Page 25: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/25.jpg)
IS 2ASysteme dâInformation a Objets
Lâinterface PreparedStatement
⢠Le programme precedent a permis dâobtenir une variable db de typeConnection (ligne 4, diapositive precedente).
⢠Un objet de type PreparedStatement est necessaire pourdefinir des requetes SQL, fournir des parametres puis executer etrecevoir eventuellement des donnees issues de lâexecution de cesrequetes.
⢠Les donnees issues de requetes select sont stockees dans desobjets de type ResultSet.
⢠La fermeture dâun PreparedStatement engendre la fermetureautomatique de tous les ResultSet associes.
Olivier Caron 9 juillet 2021 11/36
![Page 26: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/26.jpg)
IS 2ASysteme dâInformation a Objets
Lâinterface PreparedStatement
⢠Le programme precedent a permis dâobtenir une variable db de typeConnection (ligne 4, diapositive precedente).
⢠Un objet de type PreparedStatement est necessaire pourdefinir des requetes SQL, fournir des parametres puis executer etrecevoir eventuellement des donnees issues de lâexecution de cesrequetes.
⢠Les donnees issues de requetes select sont stockees dans desobjets de type ResultSet.
⢠La fermeture dâun PreparedStatement engendre la fermetureautomatique de tous les ResultSet associes.
Olivier Caron 9 juillet 2021 11/36
![Page 27: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/27.jpg)
IS 2ASysteme dâInformation a Objets
Lâinterface PreparedStatement
⢠Le programme precedent a permis dâobtenir une variable db de typeConnection (ligne 4, diapositive precedente).
⢠Un objet de type PreparedStatement est necessaire pourdefinir des requetes SQL, fournir des parametres puis executer etrecevoir eventuellement des donnees issues de lâexecution de cesrequetes.
⢠Les donnees issues de requetes select sont stockees dans desobjets de type ResultSet.
⢠La fermeture dâun PreparedStatement engendre la fermetureautomatique de tous les ResultSet associes.
Olivier Caron 9 juillet 2021 11/36
![Page 28: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/28.jpg)
IS 2ASysteme dâInformation a Objets
PreparedStatement : requetes de modification
⢠Toutes les methodes doivent prendre en compte SQLException
⢠La methode prepareStatement permet dâobtenir un objet detype PreparedStatement a partir dâun objet de typeConnection (ligne 3)
⢠La methode int executeUpdate(StringrequeteSQL) execute toute requete SQL (hors select) etretourne le nombre de lignes concernes par la commande (parfois 0pour certaines commandes).
1 S t r i n g SQLRequestCreate= â create tab l e t e s t e r â +2 â (num i n t e g e r pr imary key , ch t e x t ) â ;3 stmt = db . prepareStatement ( SQLRequestCreate ) ;4 stmt . executeUpdate ( ) ; / / ce t t e exe cu t i on re tourne 05 stmt . c lose ( ) ;
Olivier Caron 9 juillet 2021 12/36
![Page 29: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/29.jpg)
IS 2ASysteme dâInformation a Objets
PreparedStatement : passage de parametres
⢠Lâexpression de la requete SQL permet de specifier des parametres(caractere â ?â - cf ligne 1)
⢠Les methodes setType(int numParam, Type valeur)permettent de fixer les valeurs.Le premier parametre a le numero 1,. . . (lignes 3 et 6)
⢠Permet dâexecuter efficacement un flot de requetes similaires
1 S t r i n g SQLRequestInsert= â i n s e r t i n t o t e s t e r values (? ,? ) â ;2 stmt = db . prepareStatement ( SQLRequestInsert ) ;3 stmt . s e t I n t (1 ,1 ) ; stmt . s e t S t r i n g (2 , â durant â ) ;4 i n t rowsAf fected = stmt . executeUpdate ( ) ;5 System . out . p r i n t l n ( rowsAf fected+ â l i g n e ins e r ee â ) ;6 stmt . s e t I n t (1 ,2 ) ; stmt . s e t S t r i n g (2 , â dubois â ) ;7 rowsAf fected= stmt . executeUpdate ( ) ;8 System . out . p r i n t l n ( rowsAf fected+ â l i g n e ins e r ee â ) ;9 stmt . c lose ( ) ;
Olivier Caron 9 juillet 2021 13/36
![Page 30: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/30.jpg)
IS 2ASysteme dâInformation a Objets
Consultation de la base
⢠Le processus de consultation (et meme de modification) est lesuivant :
1 Creation dâun objet de type PreparedStatement. Selon lesparametres fournis lors de cette etape, les possibilites de lecture desdonnees recues ainsi que dâecriture different.
2 Execution dâune requete SQL de type Select, donnees stockeesdans un objet de type ResultSet.
3 Consultation/modification des donnees dâun ResultSet
Olivier Caron 9 juillet 2021 14/36
![Page 31: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/31.jpg)
IS 2ASysteme dâInformation a Objets
Consultation de la base
⢠Le processus de consultation (et meme de modification) est lesuivant :
1 Creation dâun objet de type PreparedStatement. Selon lesparametres fournis lors de cette etape, les possibilites de lecture desdonnees recues ainsi que dâecriture different.
2 Execution dâune requete SQL de type Select, donnees stockeesdans un objet de type ResultSet.
3 Consultation/modification des donnees dâun ResultSet
Olivier Caron 9 juillet 2021 14/36
![Page 32: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/32.jpg)
IS 2ASysteme dâInformation a Objets
Consultation de la base
⢠Le processus de consultation (et meme de modification) est lesuivant :
1 Creation dâun objet de type PreparedStatement. Selon lesparametres fournis lors de cette etape, les possibilites de lecture desdonnees recues ainsi que dâecriture different.
2 Execution dâune requete SQL de type Select, donnees stockeesdans un objet de type ResultSet.
3 Consultation/modification des donnees dâun ResultSet
Olivier Caron 9 juillet 2021 14/36
![Page 33: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/33.jpg)
IS 2ASysteme dâInformation a Objets
Consultation de la base
⢠Le processus de consultation (et meme de modification) est lesuivant :
1 Creation dâun objet de type PreparedStatement. Selon lesparametres fournis lors de cette etape, les possibilites de lecture desdonnees recues ainsi que dâecriture different.
2 Execution dâune requete SQL de type Select, donnees stockeesdans un objet de type ResultSet.
3 Consultation/modification des donnees dâun ResultSet
Olivier Caron 9 juillet 2021 14/36
![Page 34: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/34.jpg)
IS 2ASysteme dâInformation a Objets
Parametrage de PreparedStatement (1/2)
⢠La methode generale de creation dâun PreparedStatementest :PreparedStatement prepareStatement(String sql,
int resultSetType, int resultSetConcurrency)
⢠Les valeurs possibles de resultSetType :
⢠ResultSet.Type FORWARD ONLY (par defaut) la lecture desdonnees issues de la requete ne pourra se faire que de la premiereligne vers la derniere. Les donnees sont celles de lâetat de la base aumoment de lâexecution de la requete (pas de rafraÄąchissementpossible).
⢠ResultSet.Type SCROLL INSENSITIVE la lecture peut sefaire en avant et/ou arriere. Pas de rafraĹchissement possible desdonnees.
⢠ResultSet.Type SCROLL SENSITIVE la lecture peut sefaire en avant et/ou arriere. RafraĹchissement possible des donnees.
Olivier Caron 9 juillet 2021 15/36
![Page 35: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/35.jpg)
IS 2ASysteme dâInformation a Objets
Parametrage de PreparedStatement (1/2)
⢠La methode generale de creation dâun PreparedStatementest :PreparedStatement prepareStatement(String sql,
int resultSetType, int resultSetConcurrency)⢠Les valeurs possibles de resultSetType :
⢠ResultSet.Type FORWARD ONLY (par defaut) la lecture desdonnees issues de la requete ne pourra se faire que de la premiereligne vers la derniere. Les donnees sont celles de lâetat de la base aumoment de lâexecution de la requete (pas de rafraÄąchissementpossible).
⢠ResultSet.Type SCROLL INSENSITIVE la lecture peut sefaire en avant et/ou arriere. Pas de rafraĹchissement possible desdonnees.
⢠ResultSet.Type SCROLL SENSITIVE la lecture peut sefaire en avant et/ou arriere. RafraĹchissement possible des donnees.
Olivier Caron 9 juillet 2021 15/36
![Page 36: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/36.jpg)
IS 2ASysteme dâInformation a Objets
Parametrage de PreparedStatement (1/2)
⢠La methode generale de creation dâun PreparedStatementest :PreparedStatement prepareStatement(String sql,
int resultSetType, int resultSetConcurrency)⢠Les valeurs possibles de resultSetType :
⢠ResultSet.Type FORWARD ONLY (par defaut) la lecture desdonnees issues de la requete ne pourra se faire que de la premiereligne vers la derniere. Les donnees sont celles de lâetat de la base aumoment de lâexecution de la requete (pas de rafraÄąchissementpossible).
⢠ResultSet.Type SCROLL INSENSITIVE la lecture peut sefaire en avant et/ou arriere. Pas de rafraĹchissement possible desdonnees.
⢠ResultSet.Type SCROLL SENSITIVE la lecture peut sefaire en avant et/ou arriere. RafraĹchissement possible des donnees.
Olivier Caron 9 juillet 2021 15/36
![Page 37: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/37.jpg)
IS 2ASysteme dâInformation a Objets
Parametrage de PreparedStatement (1/2)
⢠La methode generale de creation dâun PreparedStatementest :PreparedStatement prepareStatement(String sql,
int resultSetType, int resultSetConcurrency)⢠Les valeurs possibles de resultSetType :
⢠ResultSet.Type FORWARD ONLY (par defaut) la lecture desdonnees issues de la requete ne pourra se faire que de la premiereligne vers la derniere. Les donnees sont celles de lâetat de la base aumoment de lâexecution de la requete (pas de rafraÄąchissementpossible).
⢠ResultSet.Type SCROLL INSENSITIVE la lecture peut sefaire en avant et/ou arriere. Pas de rafraĹchissement possible desdonnees.
⢠ResultSet.Type SCROLL SENSITIVE la lecture peut sefaire en avant et/ou arriere. RafraĹchissement possible des donnees.
Olivier Caron 9 juillet 2021 15/36
![Page 38: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/38.jpg)
IS 2ASysteme dâInformation a Objets
Parametrage de PreparedStatement (1/2)
⢠La methode generale de creation dâun PreparedStatementest :PreparedStatement prepareStatement(String sql,
int resultSetType, int resultSetConcurrency)⢠Les valeurs possibles de resultSetType :
⢠ResultSet.Type FORWARD ONLY (par defaut) la lecture desdonnees issues de la requete ne pourra se faire que de la premiereligne vers la derniere. Les donnees sont celles de lâetat de la base aumoment de lâexecution de la requete (pas de rafraÄąchissementpossible).
⢠ResultSet.Type SCROLL INSENSITIVE la lecture peut sefaire en avant et/ou arriere. Pas de rafraĹchissement possible desdonnees.
⢠ResultSet.Type SCROLL SENSITIVE la lecture peut sefaire en avant et/ou arriere. RafraĹchissement possible des donnees.
Olivier Caron 9 juillet 2021 15/36
![Page 39: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/39.jpg)
IS 2ASysteme dâInformation a Objets
Parametrage de PreparedStatement (2/2)
⢠Les valeurs possibles de resultSetConcurrency :
⢠ResultSet.CONCUR READ ONLY (par defaut) les donnees duResultSet ne sont pas modifiables
⢠ResultSet.CONCUR UPDATABLE les donnees duResultSet sont modifiables et synchronisables avec la base.
⢠La methode stmt = db.prepareStatement(sql) est un raccourcipour :stmt = db.prepareStatement(sql, ResultSet.TYPE FORWARD ONLY,
ResultSet.CONCUR READ ONLY)
Olivier Caron 9 juillet 2021 16/36
![Page 40: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/40.jpg)
IS 2ASysteme dâInformation a Objets
Parametrage de PreparedStatement (2/2)
⢠Les valeurs possibles de resultSetConcurrency :⢠ResultSet.CONCUR READ ONLY (par defaut) les donnees duResultSet ne sont pas modifiables
⢠ResultSet.CONCUR UPDATABLE les donnees duResultSet sont modifiables et synchronisables avec la base.
⢠La methode stmt = db.prepareStatement(sql) est un raccourcipour :stmt = db.prepareStatement(sql, ResultSet.TYPE FORWARD ONLY,
ResultSet.CONCUR READ ONLY)
Olivier Caron 9 juillet 2021 16/36
![Page 41: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/41.jpg)
IS 2ASysteme dâInformation a Objets
Parametrage de PreparedStatement (2/2)
⢠Les valeurs possibles de resultSetConcurrency :⢠ResultSet.CONCUR READ ONLY (par defaut) les donnees duResultSet ne sont pas modifiables
⢠ResultSet.CONCUR UPDATABLE les donnees duResultSet sont modifiables et synchronisables avec la base.
⢠La methode stmt = db.prepareStatement(sql) est un raccourcipour :stmt = db.prepareStatement(sql, ResultSet.TYPE FORWARD ONLY,
ResultSet.CONCUR READ ONLY)
Olivier Caron 9 juillet 2021 16/36
![Page 42: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/42.jpg)
IS 2ASysteme dâInformation a Objets
Parametrage de PreparedStatement (2/2)
⢠Les valeurs possibles de resultSetConcurrency :⢠ResultSet.CONCUR READ ONLY (par defaut) les donnees duResultSet ne sont pas modifiables
⢠ResultSet.CONCUR UPDATABLE les donnees duResultSet sont modifiables et synchronisables avec la base.
⢠La methode stmt = db.prepareStatement(sql) est un raccourcipour :stmt = db.prepareStatement(sql, ResultSet.TYPE FORWARD ONLY,
ResultSet.CONCUR READ ONLY)
Olivier Caron 9 juillet 2021 16/36
![Page 43: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/43.jpg)
IS 2ASysteme dâInformation a Objets
Execution dâune requete select
⢠Utilisation de la methode executeQuery de la classePreparedStatement.
S t r i n g SQLrequestSelect = â s e l e c t num, ch from t e s t e r â ;stmt = db . prepareStatement ( SQLrequestSelect ,
Resul tSet . TYPE SCROLL SENSITIVE ,Resul tSet .CONCUR UPDATABLE) ;
Resul tSet rs=stmt . executeQuery ( ) ;
Olivier Caron 9 juillet 2021 17/36
![Page 44: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/44.jpg)
IS 2ASysteme dâInformation a Objets
Lâobjet de type ResultSet
BD
Rs:ResultSet
num ch
1 dupont
2 durant
cursor
Ligne 1
Ligne 2
updateRow
refreshRow
SynchronisationJava <-> BD
⢠Gestion dâun curseur pour parcourir les lignes resultats de la requete.
⢠Apres initialisation de lâobjet, le curseur se trouve avant la premiereligne
Olivier Caron 9 juillet 2021 18/36
![Page 45: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/45.jpg)
IS 2ASysteme dâInformation a Objets
Lâobjet de type ResultSet
BD
Rs:ResultSet
num ch
1 dupont
2 durant
cursor
Ligne 1
Ligne 2
updateRow
refreshRow
SynchronisationJava <-> BD
⢠Gestion dâun curseur pour parcourir les lignes resultats de la requete.
⢠Apres initialisation de lâobjet, le curseur se trouve avant la premiereligne
Olivier Caron 9 juillet 2021 18/36
![Page 46: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/46.jpg)
IS 2ASysteme dâInformation a Objets
ResultSet : gestion du curseur (1/2)
⢠Plusieurs methodes booleennes pour deplacer le curseur.
⢠En mode ResultSet.TYPE FORWARD ONLY, seule la methodenext() est possible
⢠Ces methodes retournent false si operation impossible (ex : fin detable), la premiere ligne est la ligne 1.
methode actionnext() deplacement vers la ligne suivanteprevious() deplacement vers la ligne precedente
absolute(i) i > 0, aller a la ieme ligne
absolute(-i) i > 0, aller a la ieme ligne en partant de la derniererelative(i) i > 0, descendre de i lignesrelative(-i) i > 0, remonter de i lignes
Olivier Caron 9 juillet 2021 19/36
![Page 47: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/47.jpg)
IS 2ASysteme dâInformation a Objets
ResultSet : gestion du curseur (1/2)
⢠Plusieurs methodes booleennes pour deplacer le curseur.
⢠En mode ResultSet.TYPE FORWARD ONLY, seule la methodenext() est possible
⢠Ces methodes retournent false si operation impossible (ex : fin detable), la premiere ligne est la ligne 1.
methode actionnext() deplacement vers la ligne suivanteprevious() deplacement vers la ligne precedente
absolute(i) i > 0, aller a la ieme ligne
absolute(-i) i > 0, aller a la ieme ligne en partant de la derniererelative(i) i > 0, descendre de i lignesrelative(-i) i > 0, remonter de i lignes
Olivier Caron 9 juillet 2021 19/36
![Page 48: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/48.jpg)
IS 2ASysteme dâInformation a Objets
ResultSet : gestion du curseur (1/2)
⢠Plusieurs methodes booleennes pour deplacer le curseur.
⢠En mode ResultSet.TYPE FORWARD ONLY, seule la methodenext() est possible
⢠Ces methodes retournent false si operation impossible (ex : fin detable), la premiere ligne est la ligne 1.
methode actionnext() deplacement vers la ligne suivanteprevious() deplacement vers la ligne precedente
absolute(i) i > 0, aller a la ieme ligne
absolute(-i) i > 0, aller a la ieme ligne en partant de la derniererelative(i) i > 0, descendre de i lignesrelative(-i) i > 0, remonter de i lignes
Olivier Caron 9 juillet 2021 19/36
![Page 49: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/49.jpg)
IS 2ASysteme dâInformation a Objets
ResultSet : gestion du curseur (2/2)
methode actionafterlast() aller en fin de la table (apres la derniere ligne)beforeFirst() aller en debut de table (avant la premiere ligne)last() aller a la derniere lignefirst() aller a la premiere ligne
Les methodes booleennes suivantes ne deplacent pas le curseur maistestent sa position :
methode actionisLast() vrai si curseur en derniere ligneisFirst() vrai si curseur en premiere ligneisAfterLast() vrai si curseur est apres la derniere ligneisBeforeFirst() vrai si curseur est avant la premiere ligne
Olivier Caron 9 juillet 2021 20/36
![Page 50: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/50.jpg)
IS 2ASysteme dâInformation a Objets
ResultSet : lecture des lignes
⢠Plusieurs methodes pour lire les donnees de la ligne courante (cellepointee par le curseur)
⢠Deux modes : n⌠de colonne (indicee a partir de 1) ou nom de colonnemethode actionDate getDate(int i) retourne lâobjet Date de la colonne iDate getDate(String col) retourne lâobjet Date de la colonne colint getInt(int i) retourne un entier de la colonne iint getInt(String col) retourne un entier de la colonne colString getString(int i) retourne lâobjet String de la colonne iString getString(String col) retourne lâobjet String de la colonne col. . . . . .
Olivier Caron 9 juillet 2021 21/36
![Page 51: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/51.jpg)
IS 2ASysteme dâInformation a Objets
ResultSet : lecture des lignes
⢠Plusieurs methodes pour lire les donnees de la ligne courante (cellepointee par le curseur)
⢠Deux modes : n⌠de colonne (indicee a partir de 1) ou nom de colonnemethode actionDate getDate(int i) retourne lâobjet Date de la colonne iDate getDate(String col) retourne lâobjet Date de la colonne colint getInt(int i) retourne un entier de la colonne iint getInt(String col) retourne un entier de la colonne colString getString(int i) retourne lâobjet String de la colonne iString getString(String col) retourne lâobjet String de la colonne col. . . . . .
Olivier Caron 9 juillet 2021 21/36
![Page 52: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/52.jpg)
IS 2ASysteme dâInformation a Objets
Exemple de consultation
i n t l ineNumber = 1;rs . b e f o r e F i r s t ( ) ;while ( rs . next ( ) ) {
i n t num = rs . g e t I n t ( ânumâ ) ;S t r i n g ch = rs . g e t S t r i n g ( â ch â ) ;System . out . p r i n t l n ( â l i g n e â + lineNumber + â : â
+ num + â , â + ch ) ;l ineNumber ++;
}
⢠next() est obligatoire meme pour lire une seule ligne (ex : count)
Olivier Caron 9 juillet 2021 22/36
![Page 53: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/53.jpg)
IS 2ASysteme dâInformation a Objets
ResultSet : modification de lignes
⢠Des nouvelles methodes pour ResultSet :void updateType(String nomColonne, typenouvelleValeur)void updateRow() , void refreshRow()void cancelRowUpdates()
⢠Un exemple :
rs . f i r s t ( ) ; / / r e t o u r premie re l i g n ers . refreshRow ( ) ; / / synchron isa t ion BD â> Javars . updateSt r ing ( â ch â , â dupont â ) ;rs . updateRow ( ) ; / / synchron isa t ion Java â> BDrs . updateSt r ing ( â ch â , â Caron â ) ;rs . cancelRowUpdates ( ) ; / / pr ecedente l i g n e i n v a l i d ee
Olivier Caron 9 juillet 2021 23/36
![Page 54: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/54.jpg)
IS 2ASysteme dâInformation a Objets
ResultSet : insertion de lignes
⢠Des nouvelles methodes pour ResultSet :void moveToInsertRow()void moveToCurrentRow()void insertRow()
⢠Un exemple :
/ / phase d â i n s e r t i o nrs . moveToInsertRow ( ) ;rs . update In t ( ânumâ ,3 ) ;rs . updateSt r ing ( â ch â , â ga rc ia â ) ;rs . insertRow ( ) ; / / synchron isa t ion Java â> BDrs . moveToCurrentRow ( ) ; / / r e t o u r au curseur avant i n s e r t i o n
Olivier Caron 9 juillet 2021 24/36
![Page 55: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/55.jpg)
IS 2ASysteme dâInformation a Objets
PreparedStatement vs Statement
⢠PreparedStatement est une specialisation de Statement
⢠PreparedStatement est plus performant, notamment lorsquela requete est executee plusieurs fois
⢠PreparedStatement est plus securise, controle des valeurs deparametres
⢠un exemple de Statement :
Statement stmt = db . createStatement ( ) ;stmt . executeUpdate ( â c reate tab l e t e s t e r â +
â (num i n t e g e r pr imary key , ch t e x t ) â ) ;i n t nb= stmt . executeUpdate ( â i n s e r t i n t o t e s t e r values â +
â ( 1 , â dupont â ) , ( 2 , â durant â ) â ) ;System . out . p r i n t l n ( nb+ â l i g n e s ins e r ees â ) ;
Olivier Caron 9 juillet 2021 25/36
![Page 56: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/56.jpg)
IS 2ASysteme dâInformation a Objets
Fermeture de la connexion
⢠Fermer le dialogue SQL
⢠Fermer la session avec la base
stmt . c lose ( ) ;db . c lose ( ) ;
Olivier Caron 9 juillet 2021 26/36
![Page 57: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/57.jpg)
IS 2ASysteme dâInformation a Objets
Les objets RowSet : extension de ResultSet
⢠JDBC 4 : fusion de Connection, PreparedStatement etResultSet
⢠Integre mecanisme dâobservation des donnees modifiees.
Olivier Caron 9 juillet 2021 27/36
![Page 58: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/58.jpg)
IS 2ASysteme dâInformation a Objets
Les objets RowSet : extension de ResultSet
⢠JDBC 4 : fusion de Connection, PreparedStatement etResultSet
⢠Integre mecanisme dâobservation des donnees modifiees.
Olivier Caron 9 juillet 2021 27/36
![Page 59: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/59.jpg)
IS 2ASysteme dâInformation a Objets
Exemple RowSet
JdbcRowSet j r s = RowSetProvider . newFactory ( ) . createJdbcRowSet ( ) ;j r s . setType ( Resul tSet . TYPE SCROLL SENSITIVE) ;j r s . s e t U r l ( u r l ) ;j r s . setUsername ( user ) ;j r s . setPassword ( password ) ;j r s . setCommand ( âSELECT * FROM t e s t e r WHERE ch= ? â ) ;j r s . s e t S t r i n g (1 , â ga rc ia â ) ;j r s . execute ( ) ;
Olivier Caron 9 juillet 2021 28/36
![Page 60: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/60.jpg)
IS 2ASysteme dâInformation a Objets
Gestion des transactions
⢠Le mode par defaut est âauto-commitâ : chaque requete SQL formeune transaction
⢠Initier une transaction, choix du mode dâisolation standard :
db . setAutoCommit ( fa lse ) ;db . s e t T r a n s a c t i o n I s o l a t i o n ( Connection . TRANSACTION SERIALIZABLE) ;
⢠Valider une transaction :
stmt=db . prepareStatement ( â de le te from emprunter where numl=? â ) ;stmt . s e t I n t (1 ,2 ) ; stmt . executeUpdate ( ) ;stmt . s e t I n t (1 ,34) ; stmt . executeUpdate ( ) ;stmt . s e t I n t (1 ,27) ; stmt . executeUpdate ( ) ;
db . commit ( ) ;db . setAutoCommit ( true ) ;
Olivier Caron 9 juillet 2021 29/36
![Page 61: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/61.jpg)
IS 2ASysteme dâInformation a Objets
Annuler une transaction
⢠methode rollback()
t ry {db . setAutoCommit ( fa lse ) ; / / debut t r a n s a c t i o ndb . s e t T r a n s a c t i o n I s o l a t i o n ( Connection .TRANSACTION READ COMMITTED) ;stmt=db . prepareStatement ( â i n s e r t i n t o emprunter values (? ,? ) â ) ;stmt . s e t I n t (1 , numl ) ; stmt . s e t I n t (2 ,numu) ; stmt . executeUpdate ( ) ;i f ( nbEmprunts >= 3) db . r o l l b a c k ( ) ; / / f i n t ransac t i on , i n s e r t annul eelse db . commit ( ) ; / / f i n t r a n s a c t i o n OKdb . setAutoCommit ( true ) ;} catch ( SQLException e ) {
i f ( db != nul l ) {t ry { db . r o l l b a c k ( ) ; db . setAutoCommit ( true ) ;} catch ( SQLException ex ) {System . e r r . p r i n t l n ( â on est mal ! â ) ;
}}
Olivier Caron 9 juillet 2021 30/36
![Page 62: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/62.jpg)
IS 2ASysteme dâInformation a Objets
Prise en compte de SQL 3
⢠SQL 3 : unification de concepts oriente-objet et le monde relationnel
⢠Des colonnes de type non simple :
⢠Des tableaux (rs.getArray("nomColonne"))⢠Des objets (rs.getBlob("nomColonne"))
Olivier Caron 9 juillet 2021 31/36
![Page 63: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/63.jpg)
IS 2ASysteme dâInformation a Objets
Prise en compte de SQL 3
⢠SQL 3 : unification de concepts oriente-objet et le monde relationnel⢠Des colonnes de type non simple :
⢠Des tableaux (rs.getArray("nomColonne"))⢠Des objets (rs.getBlob("nomColonne"))
Olivier Caron 9 juillet 2021 31/36
![Page 64: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/64.jpg)
IS 2ASysteme dâInformation a Objets
Prise en compte de SQL 3
⢠SQL 3 : unification de concepts oriente-objet et le monde relationnel⢠Des colonnes de type non simple :
⢠Des tableaux (rs.getArray("nomColonne"))
⢠Des objets (rs.getBlob("nomColonne"))
Olivier Caron 9 juillet 2021 31/36
![Page 65: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/65.jpg)
IS 2ASysteme dâInformation a Objets
Prise en compte de SQL 3
⢠SQL 3 : unification de concepts oriente-objet et le monde relationnel⢠Des colonnes de type non simple :
⢠Des tableaux (rs.getArray("nomColonne"))⢠Des objets (rs.getBlob("nomColonne"))
Olivier Caron 9 juillet 2021 31/36
![Page 66: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/66.jpg)
IS 2ASysteme dâInformation a Objets
Le niveau Meta
Une meta-donnee est une donnee qui decrit une donnee
⢠Des Exemples :
⢠Modele Relationnel : table(colonne1 type1, . . . )⢠Postgres pg database, pg user, pg class,. . .⢠Java : getClass() , getMethods, getFields(), . . .
⢠JDBC propose une API pour analyser une base (introspection)
Olivier Caron 9 juillet 2021 32/36
![Page 67: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/67.jpg)
IS 2ASysteme dâInformation a Objets
Le niveau Meta
Une meta-donnee est une donnee qui decrit une donnee
⢠Des Exemples :⢠Modele Relationnel : table(colonne1 type1, . . . )
⢠Postgres pg database, pg user, pg class,. . .⢠Java : getClass() , getMethods, getFields(), . . .
⢠JDBC propose une API pour analyser une base (introspection)
Olivier Caron 9 juillet 2021 32/36
![Page 68: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/68.jpg)
IS 2ASysteme dâInformation a Objets
Le niveau Meta
Une meta-donnee est une donnee qui decrit une donnee
⢠Des Exemples :⢠Modele Relationnel : table(colonne1 type1, . . . )⢠Postgres pg database, pg user, pg class,. . .
⢠Java : getClass() , getMethods, getFields(), . . .
⢠JDBC propose une API pour analyser une base (introspection)
Olivier Caron 9 juillet 2021 32/36
![Page 69: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/69.jpg)
IS 2ASysteme dâInformation a Objets
Le niveau Meta
Une meta-donnee est une donnee qui decrit une donnee
⢠Des Exemples :⢠Modele Relationnel : table(colonne1 type1, . . . )⢠Postgres pg database, pg user, pg class,. . .⢠Java : getClass() , getMethods, getFields(), . . .
⢠JDBC propose une API pour analyser une base (introspection)
Olivier Caron 9 juillet 2021 32/36
![Page 70: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/70.jpg)
IS 2ASysteme dâInformation a Objets
Le niveau Meta
Une meta-donnee est une donnee qui decrit une donnee
⢠Des Exemples :⢠Modele Relationnel : table(colonne1 type1, . . . )⢠Postgres pg database, pg user, pg class,. . .⢠Java : getClass() , getMethods, getFields(), . . .
⢠JDBC propose une API pour analyser une base (introspection)
Olivier Caron 9 juillet 2021 32/36
![Page 71: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/71.jpg)
IS 2ASysteme dâInformation a Objets
JDBC et le niveau Meta
⢠Analyser dynamiquement la structure dâune table resultatlâinterface ResultSetMetaData
int getColumnCount() le nombre de colonnesint getColumnDisplaySize(int column) taille dâaffichage dâune colString getColumnLabel(int column) nom suggere dâune colonneString getColumnName(int column) nom de colonneint getColumnType(int column) type (cste) de la colonneString getColumnTypeName(int column) nom du type de la colonne
Olivier Caron 9 juillet 2021 33/36
![Page 72: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/72.jpg)
IS 2ASysteme dâInformation a Objets
Un exemple dâanalyse dynamique de table
stmt=db . prepareStatement ( uneRequeteSQL ) ;rs = stmt . executeQuery ( ) ;rs . l a s t ( ) ; i n t nbLignes = rs . getRow ( ) ; rs . b e f o r e F i r s t ( ) ;ResultSetMetaData rsmd = rs . getMetaData ( ) ;S t r i n g colName [ ] = new S t r i n g [ rsmd . getColumnCount ( ) ] ;for ( i n t i =0; i<rsmd . getColumnCount ( ) ; i ++) { / / ges t ion des noms de co l
colName [ i ]= rsmd . getColumnLabel ( i +1 ) ;Object r e s u l t a t [ ] [ ] = new Object [ rsmd . getColumnCount ( ) ] [ nbLignes ] ;i n t l i g =0 ;while ( rs . next ( ) ) {
for ( i n t i =0; i<colName . leng th ; i ++)switch ( rsmd . getColumnType ( i +1) ) {
case Types . INTEGER: r e s u l t a t [ i ] [ l i g ]=new I n t ege r ( rs . g e t I n t ( colName [ i ] ) ) ;break ;
case Types .VARCHAR: r e s u l t a t [ i ] [ l i g ]=new S t r i n g ( rs . ge t S t r i n g ( colName [ i ] ) ) ;break ;. . .
}}
Olivier Caron 9 juillet 2021 34/36
![Page 73: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/73.jpg)
IS 2ASysteme dâInformation a Objets
Analyse dynamique de la base
⢠Lâinterface DatabaseMetaData
⢠API tres riche (et donc complexe)⢠Permet de connaĹtre les possibilites du SGBD⢠Portable (de nombreux outils generiques)
⢠Permet de developper des outils generiques (aka PhpPgAdmin)
Olivier Caron 9 juillet 2021 35/36
![Page 74: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/74.jpg)
IS 2ASysteme dâInformation a Objets
Analyse dynamique de la base
⢠Lâinterface DatabaseMetaData⢠API tres riche (et donc complexe)
⢠Permet de connaĹtre les possibilites du SGBD⢠Portable (de nombreux outils generiques)
⢠Permet de developper des outils generiques (aka PhpPgAdmin)
Olivier Caron 9 juillet 2021 35/36
![Page 75: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/75.jpg)
IS 2ASysteme dâInformation a Objets
Analyse dynamique de la base
⢠Lâinterface DatabaseMetaData⢠API tres riche (et donc complexe)⢠Permet de connaÄątre les possibilites du SGBD
⢠Portable (de nombreux outils generiques)
⢠Permet de developper des outils generiques (aka PhpPgAdmin)
Olivier Caron 9 juillet 2021 35/36
![Page 76: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/76.jpg)
IS 2ASysteme dâInformation a Objets
Analyse dynamique de la base
⢠Lâinterface DatabaseMetaData⢠API tres riche (et donc complexe)⢠Permet de connaÄątre les possibilites du SGBD⢠Portable (de nombreux outils generiques)
⢠Permet de developper des outils generiques (aka PhpPgAdmin)
Olivier Caron 9 juillet 2021 35/36
![Page 77: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/77.jpg)
IS 2ASysteme dâInformation a Objets
Analyse dynamique de la base
⢠Lâinterface DatabaseMetaData⢠API tres riche (et donc complexe)⢠Permet de connaÄątre les possibilites du SGBD⢠Portable (de nombreux outils generiques)
⢠Permet de developper des outils generiques (aka PhpPgAdmin)
Olivier Caron 9 juillet 2021 35/36
![Page 78: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/78.jpg)
IS 2ASysteme dâInformation a Objets
Conclusion
⢠API tres riche, une petite partie de JDBC est presentee dans cecours.
⢠Une API unique quelque soit le SGBD
⢠En constante evolution : gestion de ârow setsâ, gestion de blobs,support de SQL XML, programmation par annotations Java, . . . ,
Olivier Caron 9 juillet 2021 36/36
![Page 79: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/79.jpg)
IS 2ASysteme dâInformation a Objets
Conclusion
⢠API tres riche, une petite partie de JDBC est presentee dans cecours.
⢠Une API unique quelque soit le SGBD
⢠En constante evolution : gestion de ârow setsâ, gestion de blobs,support de SQL XML, programmation par annotations Java, . . . ,
Olivier Caron 9 juillet 2021 36/36
![Page 80: Le protocole JDBC (Java DataBase Connectivity)](https://reader034.vdocuments.us/reader034/viewer/2022052106/628781a134d9481d0027d91a/html5/thumbnails/80.jpg)
IS 2ASysteme dâInformation a Objets
Conclusion
⢠API tres riche, une petite partie de JDBC est presentee dans cecours.
⢠Une API unique quelque soit le SGBD
⢠En constante evolution : gestion de ârow setsâ, gestion de blobs,support de SQL XML, programmation par annotations Java, . . . ,
Olivier Caron 9 juillet 2021 36/36