SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Introduction à JDBC
Java Data Base Connectivity
Pr Abderrahim Marzouk
Département de Mathématiques et
Informatique
Licence BIG DATA 2019-2020
1
JDBC ?
Une API (Application Programming Interface)
Java permettant de connecter un programme
Java avec des bases de données relationnelles
pour exécuter des requêtes SQL.
Le paquetage java.sql regroupe les interfaces et
les classes de l'API JDBC.
https://docs.oracle.com/javase/8/docs/api/java/
sql/package-summary.html
2
Les classes et interfaces principales du
package java.sql
• Interfaces:
▪ Driver : renvoie une instance de Connection
▪ Connection : connexion à une BD
▪ Statement : instruction SQL
▪ PreparedStatement : instruction SQL paramétrée
▪ ResultSet : n-uplets récupérés par une instruction SQL
SELECT
• Classes:
▪ DriverManager: gère les drivers, lance les
connexions aux BD
3
Pilote JDBC d’un SGBDR
Le fabriquant/L’éditeur du SGBDR fournit une
implémentation de certaines interfaces de
java.sql (Driver, Connection,....) sous forme d’un
fichier .jar (Java archive) : Le pilote complet.
Chaque SGBDR utilise un pilote (driver)
particulier permettant de traduire les requêtes
JDBC dans le langage du SGBD
4
Le pilote d’une base de données est tout simplement
une classe Java appartenant à ce jar et qui
implémente l’interface java.sql.Driver.
Cette interface contient une méthode
principale: connect(), à laquelle il faut passer
comme paramètres l’URL de la base de données
cible.
Pour chaque SGBDR, il faut donc trouver le nom de
cette classe.
5
Architecture JDBC
6
• Programme Java : écrit par le programmeur
• API JDBC : fait partie de JDK
• PILOTE JDBC : donné ou vendu par le fabriquant du SGBD
Programme Java
A
P
I
J
D
B
C
P
I
L
O
T
E
J
D
B
C
SGBDR
Procédure de programmation avec JDBC
0 - Importation du package java.sql
1- Chargement et enregistrement du driver JDBC
2 - Connexion au SGBD
3 - Création d'une requête SQL
4 - Exécution de la requête : envoi de cette requête
et récupération des résultats
5 - Traitement des résultats
6 - Fermeture de la connexion
La plupart des méthodes lèvent l'exception java.sql.SQLException.
7
1: Chargement et enregistrement du
pilote JDBC
La classe du pilote doit être chargée en mémoire :
Class.forName("nomDriver");
Cette instruction Java crée une instance pilote de type java.sql.Driver
et l’enregistre auprès du gestionnaire de pilotes JDBC de la machine
Java:
DriverManager.registerDriver(pilote);
Ex :
Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName("com.mysql.jdbc.Driver");
Class.forName("org.postgresql.Driver");
8
2: Connexion au SGBD
La classe DriverManager est utilisée pour :
• enregistrer le pilote pour un type de base de données spécifique.
• établir une connexion avec la base de données via sa
méthode statique getConnection ().
Connection cnx= DriverManager.getConnection() ;
Il existe trois signatures différentes de la méthode getConnection() que
nous pouvons utiliser:
▪ static Connection getConnection(String url, String user,
String password)
▪ static Connection getConnection(String url)
▪ static Connection getConnection(String url, Properties info)
9
DriverManager
Le DriverManager essaie tous les drivers
enregistrés (chargés en mémoire avec
Class.forName()) jusqu'à ce qu'il trouve un driver
qui lui fournisse une connexion.
10
Exemple de connexion à MySQL
Façon #1
On suppose que MySQL est hébergé sur localhost et écoute sur le port
par défaut 3306.
On peut se connecter de 4 façons possibles à la base de
données testbd avec user=root et password="":
public static void main(String[] args) throws Exception {
//Le pilote JDBC MySQL fonctionne avec le fuseau horaire UTC, il faut spécifier
explicitement le serverTimezone dans la chaîne de connexion.
String url = "jdbc:mysql://localhost:3306/testbd?serverTimezone=UTC";
String username = "root";
String password = "";
Connection cnx = DriverManager.getConnection(url, username, password);
if (cnx != null) {
System.out.println("Connecté à la base testbd");
}
}
11
Exemple de connexion à MySQL
Façon #2
public static void main(String[] args) throws Exception {
String url =
"jdbc:mysql://localhost:3306/testbd?user=root&serverTimezone=UTC";
Connection cnx = DriverManager.getConnection(url);
if (cnx != null) {
System.out.println("Connecté à la base testbd");
}
}
12
Exemple de connexion à MySQL
Façon #3
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/testbd";
Properties props = new Properties();
props.put("user", "root");
props.put("password", "");
props.put("serverTimezone", "UTC");
Connection cnx = DriverManager.getConnection(url, props);
if (cnx != null) {
System.out.println("Connecté à la base testbd");
}
}
13
Exemple de connexion à MySQL
Façon #4
// conf.properties
driver.class= com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/testbd
user=root
password=
serverTimezone=UTC
14
Exemple de connexion à MySQL
Façon #4 (suite)
public static void main(String[] args) throws Exception {
Properties props = new Properties();
FileInputStream fis = new FileInputStream("conf.properties");
props.load(fis);
Class.forName(props.getProperty("driver.class"));
String url = props.getProperty("url");
String user = props.getProperty("user");
String password = props.getProperty("password");
String serverTimezone = props.getProperty("serverTimezone");
Properties info = new Properties();
info.put("user", user);
info.put("password", password);
info.put("serverTimezone", serverTimezone);
Connection cnx = DriverManager.getConnection(url, info);
if (cnx!=null) {
System.out.println("Connecté à la base testbd");
}
}
15
Connection
• Cette interface représente une connexion à
une base de données.
• Une fois la connexion établie, nous avons
un objet Connection qui peut être utilisé pour
créer un «Statement» (état) correspondant à
une requête SQL particulière.
16
3: Création d’une requête
• L’interface Statement est utilisée pour exécuter une requête SQL statique simple.
Statement st = cnx.createStatement();
• L’interface PreparedStatement est utilisée pour exécuter une requête SQL
paramétrée/préparée
PreparedStatement ps = cnx.prepareStatement(requête préparée);
Une requête préparée contient des espaces réservés (sous forme de points
d'interrogation ?) pour les valeurs dynamiques qui seront définies lors de l'exécution.
Par exemple:
SELECT * FROM ETUDIANT WHERE ville =?;
Ici, la valeur de la ville est paramétrée par un point d'interrogation et sera définie par
l'une des méthodes setType (int index, Type value ) de l'interface PreparedStatement.
Ex.
ps.setString(1, ’Casablanca’);
17
4: Exécution de la requête
• ResultSet executeQuery (String sql) : exécute une instruction
SQL SELECT et retourne un objet ResultSet qui contient les
résultats renvoyés par la requête
La méthode executeQuery() de l’interface PreparedStatement ne
prend aucun argument.
• int executeUpdate (String sql) : exécute une instruction SQL
INSERT, UPDATE ou DELETE et renvoie le nombre de lignes
affectées (par exemple 1 ligne insérée, ou 2 lignes mises à jour,
ou 0 lignes modifiées).
La méthode executeUpdate() de l’interface PreparedStatement
ne prend aucun argument.
18
Exemple de requêtes
Statement st= cnx.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM ETUDIANT
WHERE age > 19");
OU
PreparedStatement ps= cnx.prepareStatement("SELECT * FROM
ETUDIANT WHERE age > ?");
ps.setInt(1,19);
ResultSet rs = st.executeQuery();
19
5: Traitement des résultats
L'interface ResultSet permet d'accéder ligne par ligne au résultat
retourné par une requête SELECT grâce à ses méthodes :
• boolean next() : fait avancer le curseur sur la ligne suivante
▪ Retourne true si le déplacement a été fait, false s'il n'y
avait pas d'autre ligne.
▪ Traitement de chaque ligne :
while(rs.next()) {// Traitement
de chaque ligne}
• TYPE getTYPE( int numeroDeColonne );
Les colonnes sont identifiées par leur numéro (à partir de 1)
• TYPE getTYPE( String nomDeColonne );
(par exemple getString () , getInt () , getFloat () , etc.).
20
ResultSet
▪ Sa méthode getType() retourne le contenu de
la colonne dont l'élément est de type [Type]
qui est un type Java compatible avec le type
de la colonne, pouvant être String, int, float,
boolean ...
Ex : String getString(numeroDeColonne)
21
6: Fermeture de la connexion
Fermer les connexions ouvertes permet de
libérer les ressources mobilisées.
Chaque objet possède une méthode close() :
resultset.close();
statement.close();
connection.close();
22
Exemple: INSERT
Soit la table ETUDIANT(id: auto_increment, nom, ville, age, email).
String sql = "INSERT INTO ETUDIANT (nom, ville, age, email) VALUES (?, ?, ?, ?)";
PreparedStatement ps = cnx.prepareStatement(sql);
ps.setString(1, "redouan");
ps.setString(2, "Casablanca");
ps.setInt(3, 21);
ps.setString(4, "a.redouan@yahoo.fr");
int lignesInserees = ps.executeUpdate();
if (lignesInserees > 0) {
System.out.println("Un nouvel etudiant est inséré! ");
}
23
Exemple: SELECT
String sql = "SELECT * FROM ETUDIANT";
Statement st = cnx.createStatement();
ResultSet rs = st.executeQuery(sql);
while (rs.next()){
String nom = rs.getString(2);
String ville = rs.getString(3);
String age = rs.getInt("age");
String email = rs.getString("email");
System.out.println(nom+ "-" +ville + "-" +age + "-" email);
}
24
Exemple: UPDATE
String sql = "UPDATE ETUDIANT SET ville=?, email=? WHERE id=?";
PreparedStatement ps = cnx.prepareStatement(sql);
ps.setString(1, "Tanger");
ps.setString(2, "a.redouan@gmail.com");
ps.setInt(3,12);
int lignesModifiees = st.executeUpdate();
if (lignesModifiees > 0) {
System.out.println("Un étudiant existant a été mis à jour!");
}
25
Exemple: DELETE
String sql = "DELETE FROM ETUDIANT WHERE id=?";
PreparedStatement ps= cnx.prepareStatement(sql);
ps.setString(1, 12);
int lignesSupprimees = ps.executeUpdate();
if (lignesSupprimee> 0) {
System.out.println(« Un étudiant a été supprimé!");
}
26
Référence
http://blog.paumard.org/cours/jdbc/chap02-
apercu-exemple.html
27

Contenu connexe

Tendances

JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java Youness Boukouchi
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Accès aux bases de données via jdbc
Accès aux bases de données via jdbcAccès aux bases de données via jdbc
Accès aux bases de données via jdbcRachid Lajouad
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JSAntoine Rey
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EEYassine Badri
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux ServletsFrançois Charoy
 
Fmin103 0910 tpjdbc
Fmin103 0910 tpjdbcFmin103 0910 tpjdbc
Fmin103 0910 tpjdbcKarim Amane
 

Tendances (19)

Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java JDBC: Gestion des bases de données en Java
JDBC: Gestion des bases de données en Java
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 
JAVA, JDBC et liaison base de données
JAVA, JDBC et liaison base de donnéesJAVA, JDBC et liaison base de données
JAVA, JDBC et liaison base de données
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Accès aux bases de données via jdbc
Accès aux bases de données via jdbcAccès aux bases de données via jdbc
Accès aux bases de données via jdbc
 
Jdbc
JdbcJdbc
Jdbc
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Introduction à Angular JS
Introduction à Angular JSIntroduction à Angular JS
Introduction à Angular JS
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Workshop Spring - Session 1 - L'offre Spring et les bases
Workshop Spring  - Session 1 - L'offre Spring et les basesWorkshop Spring  - Session 1 - L'offre Spring et les bases
Workshop Spring - Session 1 - L'offre Spring et les bases
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EE
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
 
Cours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateurCours design pattern m youssfi partie 3 decorateur
Cours design pattern m youssfi partie 3 decorateur
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 
Fmin103 0910 tpjdbc
Fmin103 0910 tpjdbcFmin103 0910 tpjdbc
Fmin103 0910 tpjdbc
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 

Similaire à Marzouk une introduction à jdbc

Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database ConnectivityKorteby Farouk
 
Présentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptxPrésentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptxsalmachtioui1
 
Introduction jdbc
Introduction  jdbcIntroduction  jdbc
Introduction jdbcKarim Amane
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 
Java et bases de données : JDBC
Java et bases de données : JDBCJava et bases de données : JDBC
Java et bases de données : JDBCMohammed Jaafar
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsDenis Voituron
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 EeST informatique services
 
Activity
ActivityActivity
Activitydido
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursHoracio Gonzalez
 
#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart ClientGuillaume Sauthier
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Loic Yon
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un bliantareq
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilanteejug
 
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairieCours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairieafdoumbia
 

Similaire à Marzouk une introduction à jdbc (20)

Java Database Connectivity
Java Database ConnectivityJava Database Connectivity
Java Database Connectivity
 
Présentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptxPrésentaion sur le modéle JDBC JEE .pptx
Présentaion sur le modéle JDBC JEE .pptx
 
1145709.ppt
1145709.ppt1145709.ppt
1145709.ppt
 
Introduction jdbc
Introduction  jdbcIntroduction  jdbc
Introduction jdbc
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
Java et bases de données : JDBC
Java et bases de données : JDBCJava et bases de données : JDBC
Java et bases de données : JDBC
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénients
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 
PréSentation Qualoo Le Generateur De Code Java J2 Ee
PréSentation Qualoo   Le Generateur De Code Java J2 EePréSentation Qualoo   Le Generateur De Code Java J2 Ee
PréSentation Qualoo Le Generateur De Code Java J2 Ee
 
Springioc
SpringiocSpringioc
Springioc
 
Activity
ActivityActivity
Activity
 
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
 
Jdbc par4
Jdbc par4Jdbc par4
Jdbc par4
 
#5 Java EE5 Client Lourd et Smart Client
#5 Java EE5  Client Lourd  et Smart Client#5 Java EE5  Client Lourd  et Smart Client
#5 Java EE5 Client Lourd et Smart Client
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
 
Java 5, un bilan
Java 5,  un bilanJava 5,  un bilan
Java 5, un bilan
 
Android ORMLite
Android   ORMLiteAndroid   ORMLite
Android ORMLite
 
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairieCours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
Cours PHP PDO intégrale afin de mieux appréhender la nouvelle librairie
 

Dernier

le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptximaneeaouattahee
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfMedAbdelhayeSidiAhme
 
mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoireEzechiasSteel
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Ville de Châteauguay
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésSana REFAI
 

Dernier (6)

le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptx
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
 
mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoire
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 

Marzouk une introduction à jdbc

  • 1. Introduction à JDBC Java Data Base Connectivity Pr Abderrahim Marzouk Département de Mathématiques et Informatique Licence BIG DATA 2019-2020 1
  • 2. JDBC ? Une API (Application Programming Interface) Java permettant de connecter un programme Java avec des bases de données relationnelles pour exécuter des requêtes SQL. Le paquetage java.sql regroupe les interfaces et les classes de l'API JDBC. https://docs.oracle.com/javase/8/docs/api/java/ sql/package-summary.html 2
  • 3. Les classes et interfaces principales du package java.sql • Interfaces: ▪ Driver : renvoie une instance de Connection ▪ Connection : connexion à une BD ▪ Statement : instruction SQL ▪ PreparedStatement : instruction SQL paramétrée ▪ ResultSet : n-uplets récupérés par une instruction SQL SELECT • Classes: ▪ DriverManager: gère les drivers, lance les connexions aux BD 3
  • 4. Pilote JDBC d’un SGBDR Le fabriquant/L’éditeur du SGBDR fournit une implémentation de certaines interfaces de java.sql (Driver, Connection,....) sous forme d’un fichier .jar (Java archive) : Le pilote complet. Chaque SGBDR utilise un pilote (driver) particulier permettant de traduire les requêtes JDBC dans le langage du SGBD 4
  • 5. Le pilote d’une base de données est tout simplement une classe Java appartenant à ce jar et qui implémente l’interface java.sql.Driver. Cette interface contient une méthode principale: connect(), à laquelle il faut passer comme paramètres l’URL de la base de données cible. Pour chaque SGBDR, il faut donc trouver le nom de cette classe. 5
  • 6. Architecture JDBC 6 • Programme Java : écrit par le programmeur • API JDBC : fait partie de JDK • PILOTE JDBC : donné ou vendu par le fabriquant du SGBD Programme Java A P I J D B C P I L O T E J D B C SGBDR
  • 7. Procédure de programmation avec JDBC 0 - Importation du package java.sql 1- Chargement et enregistrement du driver JDBC 2 - Connexion au SGBD 3 - Création d'une requête SQL 4 - Exécution de la requête : envoi de cette requête et récupération des résultats 5 - Traitement des résultats 6 - Fermeture de la connexion La plupart des méthodes lèvent l'exception java.sql.SQLException. 7
  • 8. 1: Chargement et enregistrement du pilote JDBC La classe du pilote doit être chargée en mémoire : Class.forName("nomDriver"); Cette instruction Java crée une instance pilote de type java.sql.Driver et l’enregistre auprès du gestionnaire de pilotes JDBC de la machine Java: DriverManager.registerDriver(pilote); Ex : Class.forName("oracle.jdbc.driver.OracleDriver"); Class.forName("com.mysql.jdbc.Driver"); Class.forName("org.postgresql.Driver"); 8
  • 9. 2: Connexion au SGBD La classe DriverManager est utilisée pour : • enregistrer le pilote pour un type de base de données spécifique. • établir une connexion avec la base de données via sa méthode statique getConnection (). Connection cnx= DriverManager.getConnection() ; Il existe trois signatures différentes de la méthode getConnection() que nous pouvons utiliser: ▪ static Connection getConnection(String url, String user, String password) ▪ static Connection getConnection(String url) ▪ static Connection getConnection(String url, Properties info) 9
  • 10. DriverManager Le DriverManager essaie tous les drivers enregistrés (chargés en mémoire avec Class.forName()) jusqu'à ce qu'il trouve un driver qui lui fournisse une connexion. 10
  • 11. Exemple de connexion à MySQL Façon #1 On suppose que MySQL est hébergé sur localhost et écoute sur le port par défaut 3306. On peut se connecter de 4 façons possibles à la base de données testbd avec user=root et password="": public static void main(String[] args) throws Exception { //Le pilote JDBC MySQL fonctionne avec le fuseau horaire UTC, il faut spécifier explicitement le serverTimezone dans la chaîne de connexion. String url = "jdbc:mysql://localhost:3306/testbd?serverTimezone=UTC"; String username = "root"; String password = ""; Connection cnx = DriverManager.getConnection(url, username, password); if (cnx != null) { System.out.println("Connecté à la base testbd"); } } 11
  • 12. Exemple de connexion à MySQL Façon #2 public static void main(String[] args) throws Exception { String url = "jdbc:mysql://localhost:3306/testbd?user=root&serverTimezone=UTC"; Connection cnx = DriverManager.getConnection(url); if (cnx != null) { System.out.println("Connecté à la base testbd"); } } 12
  • 13. Exemple de connexion à MySQL Façon #3 public static void main(String[] args) throws Exception { String url = "jdbc:mysql://localhost:3306/testbd"; Properties props = new Properties(); props.put("user", "root"); props.put("password", ""); props.put("serverTimezone", "UTC"); Connection cnx = DriverManager.getConnection(url, props); if (cnx != null) { System.out.println("Connecté à la base testbd"); } } 13
  • 14. Exemple de connexion à MySQL Façon #4 // conf.properties driver.class= com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/testbd user=root password= serverTimezone=UTC 14
  • 15. Exemple de connexion à MySQL Façon #4 (suite) public static void main(String[] args) throws Exception { Properties props = new Properties(); FileInputStream fis = new FileInputStream("conf.properties"); props.load(fis); Class.forName(props.getProperty("driver.class")); String url = props.getProperty("url"); String user = props.getProperty("user"); String password = props.getProperty("password"); String serverTimezone = props.getProperty("serverTimezone"); Properties info = new Properties(); info.put("user", user); info.put("password", password); info.put("serverTimezone", serverTimezone); Connection cnx = DriverManager.getConnection(url, info); if (cnx!=null) { System.out.println("Connecté à la base testbd"); } } 15
  • 16. Connection • Cette interface représente une connexion à une base de données. • Une fois la connexion établie, nous avons un objet Connection qui peut être utilisé pour créer un «Statement» (état) correspondant à une requête SQL particulière. 16
  • 17. 3: Création d’une requête • L’interface Statement est utilisée pour exécuter une requête SQL statique simple. Statement st = cnx.createStatement(); • L’interface PreparedStatement est utilisée pour exécuter une requête SQL paramétrée/préparée PreparedStatement ps = cnx.prepareStatement(requête préparée); Une requête préparée contient des espaces réservés (sous forme de points d'interrogation ?) pour les valeurs dynamiques qui seront définies lors de l'exécution. Par exemple: SELECT * FROM ETUDIANT WHERE ville =?; Ici, la valeur de la ville est paramétrée par un point d'interrogation et sera définie par l'une des méthodes setType (int index, Type value ) de l'interface PreparedStatement. Ex. ps.setString(1, ’Casablanca’); 17
  • 18. 4: Exécution de la requête • ResultSet executeQuery (String sql) : exécute une instruction SQL SELECT et retourne un objet ResultSet qui contient les résultats renvoyés par la requête La méthode executeQuery() de l’interface PreparedStatement ne prend aucun argument. • int executeUpdate (String sql) : exécute une instruction SQL INSERT, UPDATE ou DELETE et renvoie le nombre de lignes affectées (par exemple 1 ligne insérée, ou 2 lignes mises à jour, ou 0 lignes modifiées). La méthode executeUpdate() de l’interface PreparedStatement ne prend aucun argument. 18
  • 19. Exemple de requêtes Statement st= cnx.createStatement(); ResultSet rs = st.executeQuery("SELECT * FROM ETUDIANT WHERE age > 19"); OU PreparedStatement ps= cnx.prepareStatement("SELECT * FROM ETUDIANT WHERE age > ?"); ps.setInt(1,19); ResultSet rs = st.executeQuery(); 19
  • 20. 5: Traitement des résultats L'interface ResultSet permet d'accéder ligne par ligne au résultat retourné par une requête SELECT grâce à ses méthodes : • boolean next() : fait avancer le curseur sur la ligne suivante ▪ Retourne true si le déplacement a été fait, false s'il n'y avait pas d'autre ligne. ▪ Traitement de chaque ligne : while(rs.next()) {// Traitement de chaque ligne} • TYPE getTYPE( int numeroDeColonne ); Les colonnes sont identifiées par leur numéro (à partir de 1) • TYPE getTYPE( String nomDeColonne ); (par exemple getString () , getInt () , getFloat () , etc.). 20
  • 21. ResultSet ▪ Sa méthode getType() retourne le contenu de la colonne dont l'élément est de type [Type] qui est un type Java compatible avec le type de la colonne, pouvant être String, int, float, boolean ... Ex : String getString(numeroDeColonne) 21
  • 22. 6: Fermeture de la connexion Fermer les connexions ouvertes permet de libérer les ressources mobilisées. Chaque objet possède une méthode close() : resultset.close(); statement.close(); connection.close(); 22
  • 23. Exemple: INSERT Soit la table ETUDIANT(id: auto_increment, nom, ville, age, email). String sql = "INSERT INTO ETUDIANT (nom, ville, age, email) VALUES (?, ?, ?, ?)"; PreparedStatement ps = cnx.prepareStatement(sql); ps.setString(1, "redouan"); ps.setString(2, "Casablanca"); ps.setInt(3, 21); ps.setString(4, "a.redouan@yahoo.fr"); int lignesInserees = ps.executeUpdate(); if (lignesInserees > 0) { System.out.println("Un nouvel etudiant est inséré! "); } 23
  • 24. Exemple: SELECT String sql = "SELECT * FROM ETUDIANT"; Statement st = cnx.createStatement(); ResultSet rs = st.executeQuery(sql); while (rs.next()){ String nom = rs.getString(2); String ville = rs.getString(3); String age = rs.getInt("age"); String email = rs.getString("email"); System.out.println(nom+ "-" +ville + "-" +age + "-" email); } 24
  • 25. Exemple: UPDATE String sql = "UPDATE ETUDIANT SET ville=?, email=? WHERE id=?"; PreparedStatement ps = cnx.prepareStatement(sql); ps.setString(1, "Tanger"); ps.setString(2, "a.redouan@gmail.com"); ps.setInt(3,12); int lignesModifiees = st.executeUpdate(); if (lignesModifiees > 0) { System.out.println("Un étudiant existant a été mis à jour!"); } 25
  • 26. Exemple: DELETE String sql = "DELETE FROM ETUDIANT WHERE id=?"; PreparedStatement ps= cnx.prepareStatement(sql); ps.setString(1, 12); int lignesSupprimees = ps.executeUpdate(); if (lignesSupprimee> 0) { System.out.println(« Un étudiant a été supprimé!"); } 26