SlideShare une entreprise Scribd logo
1  sur  31
Java DataBase
Connectivity
ENSAJ 1
2ISIC – Semestre 3
Plan
- Définition de JDBC
- Objectifs de JDBC
- Interface java.sql
- Les étapes d’accès à une BD via JDBC
- Gestionnaire de pilote (DriverManager)
- Interface Connection
- Interface Statement
- ResultSet
- Interface PreparedStatement
- Fichier properties en Java
06/03/2024 2
JDBC
JDBC est l'acronyme de Java DataBase Connectivity et désigne
une API définie par Sun pour permettre un accès aux bases
de données avec Java.
Les classes de JDBC version 1.0 sont regroupées dans le
package java.sql et sont incluses dans le JDK à partir de sa
version 1.1. La version 2.0 de cette API est incluse dans la
version 1.2 du JDK.
Pour pouvoir utiliser JDBC, il faut un pilote qui est spécifique à
la base de données à laquelle on veut accéder.
06/03/2024 3
Objectifs de JDBC
• Permettre aux programmeurs Java d’écrire un
code indépendant de la base de données et du
moyen de connexion utilisé;
• API JDBC (Java DataBase Connectivity) :
– interface uniforme permettant un accès homogène
aux SGBD;
– simple à mettre en œuvre;
– indépendant du SGBD support;
– supportant les fonctionnalités de base du langage
SQL;
06/03/2024 4
Architecture: un modèle à deux
niveaux
• Premier niveau: API JDBC
– c’est la couche visible et utile pour développer des
applications Java accédant à des SGBD;
– représentée par le package java.sql;
• Les niveaux inférieurs
– destinés à faciliter l’implantation de drivers pour des
bases de données;
– représentent une interface entre les accès de bas
niveau au moteur du SGBD et l’application;
06/03/2024 5
Architecture: un modèle à deux
niveaux
06/03/2024 6
Application Java
JDBC
Oracle MySQL SQL Server ….
java.sql
8 interfaces :
– Statement
– CallableStatement, PreparedStatement
– DatabaseMetaData, ResultSetMetaData
– ResultSet
– Connection
– Driver
06/03/2024 7
Les étapes d’accès à une BD via JDBC
Pour accéder à une base de données via JDBC, vous avez cinq étapes à suivre:
Première étape :
Préciser le type de driver que l'on veut utiliser, le Driver permet de gérer l'accès à un type particulier
de SGBD.
Deuxième étape :
Récupérer un objet « Connection » en s'identifiant auprès du SGBD et en précisant la base utilisée.
Troisième étape :
A partir de la connexion, créer un « statement » (Instruction SQL) correspondant à une requête
particulière.
Quatrième étape :
Exécuter ce statement au niveau du SGBD et traiter le type de retour.
Dernière étape :
Se déconnecter de la base en fermant la connexion.
06/03/2024 8
Les étapes d’accès à une BD via JDBC
Toutes les classes et interfaces de JDBC nécessaires pour établir une connection à la
base de données sont dans le package java.sql. Il faut donc l'importer dans tous les
programmes devant utiliser JDBC. Il y a 4 classes importantes : DriverManager,
Connection, Statement, et ResultSet, chacune correspondant à une étape de
l'accès aux données :
06/03/2024 9
Interface / Classe Role
DriverManager charge et configure le driver de la base de données.
Connection
réalise la connection et l'authentification à la base de
données.
Statement
contient la requête SQL et la transmet à la base de
données.
ResultSet
permet de parcourir les informations retournées par la
base de données dans le cas d'une sélection de
données
DriverManager
Les applications java utilisant le JDBC sont indépendantes du SGBDR
utilisé et du Système d’exploitation, seul le driver utilisé est
spécifique. Cette indépendance est assuré par le « gestionnaire de
pilotes » DriverManager.
Chaque SGBDR fournit le driver adéquat, les drivers ne sont pas fournis
avec JDBC.
Une même application, si elle accepte en paramètre le nom du driver
et la localisation de la base, peut interroger une même base de
données (de même structure) supportée par des SGBDs différents :
mySQL, Access, PostgreSQL , Oracle, Dbase, …
06/03/2024 10
DriverManager
Pour se connecter à une base en utilisant un driver spécifique, la
documentation du driver fournit le nom de la classe à utiliser. Par
exemple, si le nom de la classe est jdbc.DriverXXX, le chargement du driver
se fera avec le code suivant :
Class.forName("jdbc.DriverXXX");
Class.forName("com.mysql.jdbc.Driver"); // pour MySQL
Class.forName("postgresql.Driver");
Il n'est pas nécessaire de créer une instance de cette classe et de l'enregistrer
avec le DriverManager car l'appel à Class.forName le fait
automatiquement : ce traitement charge le pilote et créer une instance de
cette classe.
La méthode static forName() de la classe Class peut lever l'exception
java.lang.ClassNotFoundException.
06/03/2024 11
Connection
Pour se connecter à une base de données, il faut instancier un objet
d’une classe qui implémente l’interface Connection en lui précisant
sous forme d'URL la base à accéder. la classe DriverManager offre
la méthode :
static Connection getConnection(String url, String user, String password)
Qui crée une connexion permettant d'utiliser une base de données.
url : identification de la base considérée sur le SGBD, le format de
l'URL est dépendant du SGGB utilisé
user : nom de l'utilisateur qui se connecte à la base
password : mot de passe de l'utilisateur
06/03/2024 12
Statement
Une fois la connection établie, il est possible d'exécuter des ordres SQL. Les
requêtes d'interrogation SQL sont exécutées avec les méthodes d'un objet
Statement que l'on obtient à partir d'un objet Connection via la méthode
createStatement().
Pour une requête de type interrogation (SELECT), la méthode à utiliser de la
classe Statement est executeQuery. Pour des traitements de mise à jour, il
faut utiliser la méthode executeUpdate(). Lors de l'appel à la méthode
d'exécution, il est nécessaire de lui fournir en paramètre la requête SQL
sous forme de chaîne de caractères.
Le résultat d'une requête d'interrogation executeQuery est renvoyé dans un
objet de la classe ResultSet par la méthode executeQuery().
Exemple :
06/03/2024 13
Statement
1) ...
2) //insertion d'un enregistrement dans la table client
3) String requete = "INSERT INTO client VALUES (3,'client 3','prenom 3')";
4) try {
5) Statement stmt = con.createStatement();
6) int nbMaj = stmt.executeUpdate(requete);
7) affiche("nb mise a jour = "+nbMaj);
8) } catch (SQLException e) {
9) e.printStackTrace();
10) }
11) ...
06/03/2024 14
Statement
Remarque :
Si l'on utilise executeQuery() pour exécuter une
requête SQL ne contenant pas d'ordre SELECT,
alors une exception de type SQLException est
levée.
06/03/2024 15
ResultSet
C'est une classe qui représente une abstraction d'une table qui se compose
de plusieurs enregistrements constitués de colonnes qui contiennent les
données. Les principales méthodes pour obtenir des données sont :
06/03/2024 16
Méthode Role
getInt(int)
retourne le contenu de la colonne dont le numéro est passé en paramètre sous forme
d'entier.
getInt(String)
retourne le contenu de la colonne dont le nom est passé en paramètre sous forme
Chaîne de caractère.
getFloat(int)
retourne le contenu de la colonne dont le numéro est passé en paramètre sous forme de
nombre flottant.
getFloat(String)
getDate(int)
retourne le contenu de la colonne dont le numéro est passé en paramètre sous forme de
date.
getDate(String)
next() se déplace sur le prochain enregistrement : retourne false si la fin est atteinte
Close() ferme le ResultSet
getMetaData() retourne un objet ResultSetMetaData associé au ResultSet.
ResultSet
La méthode next() déplace le curseur sur le prochain
enregistrement. Le curseur pointe initialement juste avant
le premier enregistrement : il est nécessaire de faire un
premier appel à la méthode next() pour ce placer sur le
premier enregistrement.
Des appels successifs à next permettent de parcourir
l'ensemble des enregistrements.
Elle retourne false lorsqu'il n'y a plus d'enregistrement. Il faut
toujours protéger le parcours d'une table dans un bloc de
capture d'exception (try catch)
06/03/2024 17
ResultSet
Les méthodes getXXX() permettent d'extraire les données selon leur type
spécifiée par XXX tel que getString(), getDouble(), getInteger(), etc ... . Il
existe deux formes de ces méthodes : indiquer le numéro la colonne en
paramètre (en commençant par 1) ou indiquer le nom de la colonne en
paramètre. La première méthode est plus efficace mais peut générer plus
d'erreurs à l'éxecution notamment si la structure de la table évolue.
La méthode getString() permet d'obtenir la valeur d'un champ de n'importe
quel type.
Attention : il est important de noter que ce numéro de colonne fourni en
paramètre fait référence au numéro de colonne de l'objet resultSet ( celui
correspondant dans l'ordre SELECT )et non au numéro de colonne de la
table.
06/03/2024 18
ResultSetMetaData
La méthode getMetaData() d'un objet ResultSet retourne un
objet de typeResultSetMetaData. Cet objet permet de
connaître le nombre, le nom et le types des colonnes
06/03/2024 19
Méthode Role
int getColumnCount() retourne le nombre de colonnes du ResultSet
String getColumnName(int) retourne le nom de la colonne dont le numéro est donné
String getColumnLabel(int) retourne le libellé de la colonne donnée
boolean isCurrency(int) retourne true si la colonne contient un nombre au format monétaire
boolean isReadOnly(int) retourne true si la colonne est en lecture seule
boolean isAutoIncrement(int) retourne true si la colonne est auto incrémentée
int getColumnType(int) retourne le type de données SQL de la colonne
Synthèse
06/03/2024 20
DriverManager Connection Statement ResultSet
Crée Crée Crée
Lien établi vers la
base
Pilote
Base de données
SQL Données
Exemple : Insertion des données
06/03/2024 21
Exemple : Sélection des données
06/03/2024 22
TP
• TP1 : ACCÈS DONNÉES JDBC AVEC JAVA
06/03/2024 23
PreparedStatement
L'interface PreparedStatement étend Statement et représente une
instruction paramétrée. Cette interface diffère de Statement sur deux
points principaux :
• Les instances de PreparedStatement contiennent une instruction SQL dèjà
compilée. D'où le terme prepared. Cela améliore notamment les
performances si cette instruction doit être appelée de nombreuses fois.
• Les instructions SQL des instances de PreparedStatement contiennent un
ou plusieurs paramètres d'entrée, non spécifiés lors de la création de
l'instruction. Ces paramètres sont représentés par des points
d'interrogation(?). Ces paramètres doivent être spécifiés avant l'exécution.
L'exécution des PreparedStatement est identique à celle des simples
Statement, à la différence près qu'il n'y a pas d'argument aux méthodes
executeXXX.
06/03/2024 24
PreparedStatement
L'instantiation de PreparedStatement se fait à partir de
la classe Connection, grâce aux méthodes
prepareStatement.
Voici quel ques exemples :
Connection connection = ...;
PreparedStatement prep1 = connection.prepareStatement("SELECT * FROM Annuaire WHERE nom = ?");
//requête paramétrée pour rechercher un nom dans un Annuaire
PreparedStatement prep2 = connection.prepareStatement("UPDATE Annuaire SET noTel = ? WHERE nom = ?");
//requête paramétrée pouvant servir à mettre à jour le numéro de tél. d'un abonné donné
PreparedStatement prep3 = connection.prepareStatement("SELECT Attribut1, Attribut2 FROM MaTable");
// il peut ne pas y avoir de paramètres : sélection de deux attributs de la table MaTable
06/03/2024 25
PreparedStatement
Le passage des paramètres d'entrée des PreparedStatement se fait
grâce à l'ensemble des méthodes setXXX. Il est important de
connaître les correspondances entre le types SQL et les types java
String sql = "UPDATE Stocks SET prix = ?, quantite = ? WHERE nom =?";
//préparation de la requête
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//on assigne un décimal au premier paramètre
preparedStatement.setBigDecimal(1,15.6);
//on assigne un entier au second paramètre
preparedStatement.setIntl(2,256);
//on assigne une chaîne de caractères au troisième
preparedStatement.setStringl(3,"café");
//exécution de la requête
preparedStatement.executeUpdate();
06/03/2024 26
PreparedStatement
• La méthode setObject permet de passer n'importe quel type d'argument. Cette méthode, en plus
de l'index du paramètre et de la valeur de celui-ci, peut prendre en argument un entier
définissant le type SQL.
String sql = "INSERT INTO Annuaire (nom, prenom, tel) VALUES(?,?,?)";
PreparedStatement statement = connection.prepareStatement(sql);
//en spécifiant bien les types SQL cibles
statement.setObject(1,"toto", Types.VARCHAR);
statement.setObject(2,"titi",Types.VARCHAR);
statement.setObject(3,new Integer(123),Types.INTEGER);
statement.executeUpdate();
//on peut ne pas spécifier le type sql
statement.setObject(1,"bobo");
statement.setObject(2,"bibi");
statement.setObject(3,new Integer(456));
statement.executeUpdate();
//certains types seront automatiquement convertis, d'autres non
statement.setObject(1,"nono");
statement.setObject(2,"nini");
statement.setObject(3,"789",Types.INTEGER);
statement.executeUpdate();
06/03/2024 27
PreparedStatement
Remarque :
Pour vider un paramètre on peut utiliser la
méthode setXXX correspondante, cela a pour
effet d'écraser la valeur passée
précédemment. Pour vider tous les
paramètres, vous pouvez utiliser la
méthode clearParameters().
06/03/2024 28
Fichier properties en Java
Un fichier properties est un fichier nommé xxxx.properties, de format texte tout
simple, et contenant des listes de type
# un commentaire
nom=valeur
Toutes les valeurs sont de type String.
• Exemple :
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/compatrol
jdbc.username=root
jdbc.password=root
06/03/2024 29
Fichier properties en Java
Lire un fichier de propriétés en Java :
• FileInputStream f = new FileInputStream ("base.properties");
• Properties p = new Properties();
• p.load(f);
• p.getProperty("jdbc.url");
• p.getProperty("jdbc.username");
• p.getProperty("jdbc.password")
06/03/2024 30
TP2
06/03/2024 31

Contenu connexe

Similaire à Présentaion sur le modéle JDBC JEE .pptx

Introduction jdbc
Introduction  jdbcIntroduction  jdbc
Introduction jdbcKarim Amane
 
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
 
Fmin103 0910 tpjdbc
Fmin103 0910 tpjdbcFmin103 0910 tpjdbc
Fmin103 0910 tpjdbcKarim Amane
 
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
 
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
 
presentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfpresentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfRihabBENLAMINE
 
Connexion jdbc
Connexion jdbcConnexion jdbc
Connexion jdbcInes Ouaz
 
Développement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdfDéveloppement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdfYasushiTsubakik
 
Activity
ActivityActivity
Activitydido
 
Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Laurent BUNIET
 
#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
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux ServletsFrançois Charoy
 

Similaire à Présentaion sur le modéle JDBC JEE .pptx (20)

Introduction jdbc
Introduction  jdbcIntroduction  jdbc
Introduction jdbc
 
3-android.pdf
3-android.pdf3-android.pdf
3-android.pdf
 
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
 
Fmin103 0910 tpjdbc
Fmin103 0910 tpjdbcFmin103 0910 tpjdbc
Fmin103 0910 tpjdbc
 
Jdbc par4
Jdbc par4Jdbc par4
Jdbc par4
 
575
575575
575
 
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
 
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
 
presentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfpresentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdf
 
La 2ème partie de la présentation PHP
La 2ème partie de la présentation PHPLa 2ème partie de la présentation PHP
La 2ème partie de la présentation PHP
 
Servlets et JSP
Servlets et JSPServlets et JSP
Servlets et JSP
 
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
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
Connexion jdbc
Connexion jdbcConnexion jdbc
Connexion jdbc
 
Développement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdfDéveloppement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdf
 
Activity
ActivityActivity
Activity
 
Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2Cours de C++, en français, 2002 - Cours 3.2
Cours de C++, en français, 2002 - Cours 3.2
 
#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
 
Rapport tp3 j2ee
Rapport tp3 j2eeRapport tp3 j2ee
Rapport tp3 j2ee
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
 

Présentaion sur le modéle JDBC JEE .pptx

  • 2. Plan - Définition de JDBC - Objectifs de JDBC - Interface java.sql - Les étapes d’accès à une BD via JDBC - Gestionnaire de pilote (DriverManager) - Interface Connection - Interface Statement - ResultSet - Interface PreparedStatement - Fichier properties en Java 06/03/2024 2
  • 3. JDBC JDBC est l'acronyme de Java DataBase Connectivity et désigne une API définie par Sun pour permettre un accès aux bases de données avec Java. Les classes de JDBC version 1.0 sont regroupées dans le package java.sql et sont incluses dans le JDK à partir de sa version 1.1. La version 2.0 de cette API est incluse dans la version 1.2 du JDK. Pour pouvoir utiliser JDBC, il faut un pilote qui est spécifique à la base de données à laquelle on veut accéder. 06/03/2024 3
  • 4. Objectifs de JDBC • Permettre aux programmeurs Java d’écrire un code indépendant de la base de données et du moyen de connexion utilisé; • API JDBC (Java DataBase Connectivity) : – interface uniforme permettant un accès homogène aux SGBD; – simple à mettre en œuvre; – indépendant du SGBD support; – supportant les fonctionnalités de base du langage SQL; 06/03/2024 4
  • 5. Architecture: un modèle à deux niveaux • Premier niveau: API JDBC – c’est la couche visible et utile pour développer des applications Java accédant à des SGBD; – représentée par le package java.sql; • Les niveaux inférieurs – destinés à faciliter l’implantation de drivers pour des bases de données; – représentent une interface entre les accès de bas niveau au moteur du SGBD et l’application; 06/03/2024 5
  • 6. Architecture: un modèle à deux niveaux 06/03/2024 6 Application Java JDBC Oracle MySQL SQL Server ….
  • 7. java.sql 8 interfaces : – Statement – CallableStatement, PreparedStatement – DatabaseMetaData, ResultSetMetaData – ResultSet – Connection – Driver 06/03/2024 7
  • 8. Les étapes d’accès à une BD via JDBC Pour accéder à une base de données via JDBC, vous avez cinq étapes à suivre: Première étape : Préciser le type de driver que l'on veut utiliser, le Driver permet de gérer l'accès à un type particulier de SGBD. Deuxième étape : Récupérer un objet « Connection » en s'identifiant auprès du SGBD et en précisant la base utilisée. Troisième étape : A partir de la connexion, créer un « statement » (Instruction SQL) correspondant à une requête particulière. Quatrième étape : Exécuter ce statement au niveau du SGBD et traiter le type de retour. Dernière étape : Se déconnecter de la base en fermant la connexion. 06/03/2024 8
  • 9. Les étapes d’accès à une BD via JDBC Toutes les classes et interfaces de JDBC nécessaires pour établir une connection à la base de données sont dans le package java.sql. Il faut donc l'importer dans tous les programmes devant utiliser JDBC. Il y a 4 classes importantes : DriverManager, Connection, Statement, et ResultSet, chacune correspondant à une étape de l'accès aux données : 06/03/2024 9 Interface / Classe Role DriverManager charge et configure le driver de la base de données. Connection réalise la connection et l'authentification à la base de données. Statement contient la requête SQL et la transmet à la base de données. ResultSet permet de parcourir les informations retournées par la base de données dans le cas d'une sélection de données
  • 10. DriverManager Les applications java utilisant le JDBC sont indépendantes du SGBDR utilisé et du Système d’exploitation, seul le driver utilisé est spécifique. Cette indépendance est assuré par le « gestionnaire de pilotes » DriverManager. Chaque SGBDR fournit le driver adéquat, les drivers ne sont pas fournis avec JDBC. Une même application, si elle accepte en paramètre le nom du driver et la localisation de la base, peut interroger une même base de données (de même structure) supportée par des SGBDs différents : mySQL, Access, PostgreSQL , Oracle, Dbase, … 06/03/2024 10
  • 11. DriverManager Pour se connecter à une base en utilisant un driver spécifique, la documentation du driver fournit le nom de la classe à utiliser. Par exemple, si le nom de la classe est jdbc.DriverXXX, le chargement du driver se fera avec le code suivant : Class.forName("jdbc.DriverXXX"); Class.forName("com.mysql.jdbc.Driver"); // pour MySQL Class.forName("postgresql.Driver"); Il n'est pas nécessaire de créer une instance de cette classe et de l'enregistrer avec le DriverManager car l'appel à Class.forName le fait automatiquement : ce traitement charge le pilote et créer une instance de cette classe. La méthode static forName() de la classe Class peut lever l'exception java.lang.ClassNotFoundException. 06/03/2024 11
  • 12. Connection Pour se connecter à une base de données, il faut instancier un objet d’une classe qui implémente l’interface Connection en lui précisant sous forme d'URL la base à accéder. la classe DriverManager offre la méthode : static Connection getConnection(String url, String user, String password) Qui crée une connexion permettant d'utiliser une base de données. url : identification de la base considérée sur le SGBD, le format de l'URL est dépendant du SGGB utilisé user : nom de l'utilisateur qui se connecte à la base password : mot de passe de l'utilisateur 06/03/2024 12
  • 13. Statement Une fois la connection établie, il est possible d'exécuter des ordres SQL. Les requêtes d'interrogation SQL sont exécutées avec les méthodes d'un objet Statement que l'on obtient à partir d'un objet Connection via la méthode createStatement(). Pour une requête de type interrogation (SELECT), la méthode à utiliser de la classe Statement est executeQuery. Pour des traitements de mise à jour, il faut utiliser la méthode executeUpdate(). Lors de l'appel à la méthode d'exécution, il est nécessaire de lui fournir en paramètre la requête SQL sous forme de chaîne de caractères. Le résultat d'une requête d'interrogation executeQuery est renvoyé dans un objet de la classe ResultSet par la méthode executeQuery(). Exemple : 06/03/2024 13
  • 14. Statement 1) ... 2) //insertion d'un enregistrement dans la table client 3) String requete = "INSERT INTO client VALUES (3,'client 3','prenom 3')"; 4) try { 5) Statement stmt = con.createStatement(); 6) int nbMaj = stmt.executeUpdate(requete); 7) affiche("nb mise a jour = "+nbMaj); 8) } catch (SQLException e) { 9) e.printStackTrace(); 10) } 11) ... 06/03/2024 14
  • 15. Statement Remarque : Si l'on utilise executeQuery() pour exécuter une requête SQL ne contenant pas d'ordre SELECT, alors une exception de type SQLException est levée. 06/03/2024 15
  • 16. ResultSet C'est une classe qui représente une abstraction d'une table qui se compose de plusieurs enregistrements constitués de colonnes qui contiennent les données. Les principales méthodes pour obtenir des données sont : 06/03/2024 16 Méthode Role getInt(int) retourne le contenu de la colonne dont le numéro est passé en paramètre sous forme d'entier. getInt(String) retourne le contenu de la colonne dont le nom est passé en paramètre sous forme Chaîne de caractère. getFloat(int) retourne le contenu de la colonne dont le numéro est passé en paramètre sous forme de nombre flottant. getFloat(String) getDate(int) retourne le contenu de la colonne dont le numéro est passé en paramètre sous forme de date. getDate(String) next() se déplace sur le prochain enregistrement : retourne false si la fin est atteinte Close() ferme le ResultSet getMetaData() retourne un objet ResultSetMetaData associé au ResultSet.
  • 17. ResultSet La méthode next() déplace le curseur sur le prochain enregistrement. Le curseur pointe initialement juste avant le premier enregistrement : il est nécessaire de faire un premier appel à la méthode next() pour ce placer sur le premier enregistrement. Des appels successifs à next permettent de parcourir l'ensemble des enregistrements. Elle retourne false lorsqu'il n'y a plus d'enregistrement. Il faut toujours protéger le parcours d'une table dans un bloc de capture d'exception (try catch) 06/03/2024 17
  • 18. ResultSet Les méthodes getXXX() permettent d'extraire les données selon leur type spécifiée par XXX tel que getString(), getDouble(), getInteger(), etc ... . Il existe deux formes de ces méthodes : indiquer le numéro la colonne en paramètre (en commençant par 1) ou indiquer le nom de la colonne en paramètre. La première méthode est plus efficace mais peut générer plus d'erreurs à l'éxecution notamment si la structure de la table évolue. La méthode getString() permet d'obtenir la valeur d'un champ de n'importe quel type. Attention : il est important de noter que ce numéro de colonne fourni en paramètre fait référence au numéro de colonne de l'objet resultSet ( celui correspondant dans l'ordre SELECT )et non au numéro de colonne de la table. 06/03/2024 18
  • 19. ResultSetMetaData La méthode getMetaData() d'un objet ResultSet retourne un objet de typeResultSetMetaData. Cet objet permet de connaître le nombre, le nom et le types des colonnes 06/03/2024 19 Méthode Role int getColumnCount() retourne le nombre de colonnes du ResultSet String getColumnName(int) retourne le nom de la colonne dont le numéro est donné String getColumnLabel(int) retourne le libellé de la colonne donnée boolean isCurrency(int) retourne true si la colonne contient un nombre au format monétaire boolean isReadOnly(int) retourne true si la colonne est en lecture seule boolean isAutoIncrement(int) retourne true si la colonne est auto incrémentée int getColumnType(int) retourne le type de données SQL de la colonne
  • 20. Synthèse 06/03/2024 20 DriverManager Connection Statement ResultSet Crée Crée Crée Lien établi vers la base Pilote Base de données SQL Données
  • 21. Exemple : Insertion des données 06/03/2024 21
  • 22. Exemple : Sélection des données 06/03/2024 22
  • 23. TP • TP1 : ACCÈS DONNÉES JDBC AVEC JAVA 06/03/2024 23
  • 24. PreparedStatement L'interface PreparedStatement étend Statement et représente une instruction paramétrée. Cette interface diffère de Statement sur deux points principaux : • Les instances de PreparedStatement contiennent une instruction SQL dèjà compilée. D'où le terme prepared. Cela améliore notamment les performances si cette instruction doit être appelée de nombreuses fois. • Les instructions SQL des instances de PreparedStatement contiennent un ou plusieurs paramètres d'entrée, non spécifiés lors de la création de l'instruction. Ces paramètres sont représentés par des points d'interrogation(?). Ces paramètres doivent être spécifiés avant l'exécution. L'exécution des PreparedStatement est identique à celle des simples Statement, à la différence près qu'il n'y a pas d'argument aux méthodes executeXXX. 06/03/2024 24
  • 25. PreparedStatement L'instantiation de PreparedStatement se fait à partir de la classe Connection, grâce aux méthodes prepareStatement. Voici quel ques exemples : Connection connection = ...; PreparedStatement prep1 = connection.prepareStatement("SELECT * FROM Annuaire WHERE nom = ?"); //requête paramétrée pour rechercher un nom dans un Annuaire PreparedStatement prep2 = connection.prepareStatement("UPDATE Annuaire SET noTel = ? WHERE nom = ?"); //requête paramétrée pouvant servir à mettre à jour le numéro de tél. d'un abonné donné PreparedStatement prep3 = connection.prepareStatement("SELECT Attribut1, Attribut2 FROM MaTable"); // il peut ne pas y avoir de paramètres : sélection de deux attributs de la table MaTable 06/03/2024 25
  • 26. PreparedStatement Le passage des paramètres d'entrée des PreparedStatement se fait grâce à l'ensemble des méthodes setXXX. Il est important de connaître les correspondances entre le types SQL et les types java String sql = "UPDATE Stocks SET prix = ?, quantite = ? WHERE nom =?"; //préparation de la requête PreparedStatement preparedStatement = connection.prepareStatement(sql); //on assigne un décimal au premier paramètre preparedStatement.setBigDecimal(1,15.6); //on assigne un entier au second paramètre preparedStatement.setIntl(2,256); //on assigne une chaîne de caractères au troisième preparedStatement.setStringl(3,"café"); //exécution de la requête preparedStatement.executeUpdate(); 06/03/2024 26
  • 27. PreparedStatement • La méthode setObject permet de passer n'importe quel type d'argument. Cette méthode, en plus de l'index du paramètre et de la valeur de celui-ci, peut prendre en argument un entier définissant le type SQL. String sql = "INSERT INTO Annuaire (nom, prenom, tel) VALUES(?,?,?)"; PreparedStatement statement = connection.prepareStatement(sql); //en spécifiant bien les types SQL cibles statement.setObject(1,"toto", Types.VARCHAR); statement.setObject(2,"titi",Types.VARCHAR); statement.setObject(3,new Integer(123),Types.INTEGER); statement.executeUpdate(); //on peut ne pas spécifier le type sql statement.setObject(1,"bobo"); statement.setObject(2,"bibi"); statement.setObject(3,new Integer(456)); statement.executeUpdate(); //certains types seront automatiquement convertis, d'autres non statement.setObject(1,"nono"); statement.setObject(2,"nini"); statement.setObject(3,"789",Types.INTEGER); statement.executeUpdate(); 06/03/2024 27
  • 28. PreparedStatement Remarque : Pour vider un paramètre on peut utiliser la méthode setXXX correspondante, cela a pour effet d'écraser la valeur passée précédemment. Pour vider tous les paramètres, vous pouvez utiliser la méthode clearParameters(). 06/03/2024 28
  • 29. Fichier properties en Java Un fichier properties est un fichier nommé xxxx.properties, de format texte tout simple, et contenant des listes de type # un commentaire nom=valeur Toutes les valeurs sont de type String. • Exemple : jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost/compatrol jdbc.username=root jdbc.password=root 06/03/2024 29
  • 30. Fichier properties en Java Lire un fichier de propriétés en Java : • FileInputStream f = new FileInputStream ("base.properties"); • Properties p = new Properties(); • p.load(f); • p.getProperty("jdbc.url"); • p.getProperty("jdbc.username"); • p.getProperty("jdbc.password") 06/03/2024 30