Академический Документы
Профессиональный Документы
Культура Документы
Partie IX: Accès aux Bases de Données
via JDBC
API JDBC (Java Database Connectivity)
Interface d’accès aux bases de données relationnelles;
Permet l’accès uniforme à un grand ensemble de
SGBD (Oracle, Mysql, PostgreSql, etc,);
Ensemble de classes et d’interfaces Java
Les interfaces sont implémentés par des drivers
Package java.sql ou javax,sql
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 2
Accès aux bases de données via JDBC
Pilotes (JDBC) de bases de données
Ensemble de classes concrètes qui implémentent les
interfaces spécifiées dans l’API JDBC
Chaque implémentation correspond à un SGBD
particulier
Les pilotes JDBC sont essentiellement écrites en java.
Les classes pour une implémentation données se
trouvent dans un fichier « .jar »
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 3
Accès aux bases de données via JDBC
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 4
Quelques classes de l’API JDBC
Java.sql.Connection Crée une connexion avec une base de données précise
Charge les pilotes de bases de données et gère les
Java.sql.DriverManager
connections entre l’application et le pilote
Java.sql.Statement Instruction SQL qui permet d’effectuer une requête.
Ensemble logique de colonnes et de lignes de données
Java.sql.ResultSet
renvoyées par l’exécution d’une instruction
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 5
Accès aux bases de données via JDBC
Les étapes d’accès à une base de données
1) Charger une classe de pilote JDBC en mémoire
2) Créer une Connexion à la Base de Données
3) Créer une instruction
4) Exécution de l’instruction pour obtenir un résultat
sous forme de table
5) Exploiter le résultat
6) Fermeture les connexions ouvertes,
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 6
Accès aux bases de données via JDBC
Les classes d’accès aux BD via JDBC
DriverManager permet de créer des «Connection»
Les «Connection» permettent de créer des requêtes
Les requêtes permettent d’obtenir des résultats
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 7
Accès aux bases de données via JDBC
Chargement du bon pilote en mémoire
Le pilote est représenté par une bibliothèque de
classe « .jar »
Deux méthodes pour le chargement
• Modifier les propriétés du système
– Les propriétés du système sont stockées dans l’objet Properties du
package java.util
– System.setProperty(" jdbc.drivers ", " com.mysql.jdbc.Driver ");
• Utiliser la classe « Class » pour charger la classe en mémoire
– Class.forName(String) ClassNotFoundException
– Exemple: Class.forName("com.mysql.jdbc.Driver");
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 8
Accès aux bases de données via JDBC
Création d’une connexion à la base de données
Exemple
• Connection connexion =
DriverManager.getConnection("jdbc:mysql://localhost/Personnel", "root",
"rootpwd");
Création d’une requête (statement)
Statement instruction = connexion.createStatement();
Exécution d'une instruction SQL.
ResultSet resultat = instruction.executeQuery("Requete SQL");
Exemple
• ResultSet résultat = instruction.executeQuery("SELECT * FROM Personne");
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 9
Accès aux bases de données via JDBC
Exploitation des résultats
while (resultat.next()) {
Traitements
}
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 10
Accès aux bases de données via JDBC
Exemple d’Application
Nom de la base de donnée: bd‐peronnel
Compte d’accès à la base de données
• Nom utilisateur: admin
• Mot de pass: admin123
Tables de la Base de Données
• Une seule table: employe
• Colonne de la table: matricule, nom, prenom, fonction
Bibliothèque Driver Mysql: com.mysql.jdbc.Driver.jar
Classe Driver Mysql: com.mysql.jdbc.Driver
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 11
Accès aux bases de données via JDBC
import java.sql.*;
class TestBd {
public static void main(String[] args) {
try {
// Class.forName("com.mysql.jdbc.Driver");
System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
Connection connexion = DriverManager.getConnection("jdbc:mysql://localhost/personnel", "admin", "admin123")
Statement instruction = connexion.createStatement();
ResultSet resultat = instruction.executeQuery("SELECT * FROM Personne");
while (resultat.next()) {
System.out.println(" Matricule : "+ resultat.getInt(" matricule") );
System.out.println("Nom et Prenoms : "+ resultat.getString("nom") + " "+ resultat.getString("prenom") );
System.out.println("Fonction : "+ resultat.getInt("fontcion"));
}
}
atch (ClassNotFoundException ex) { System.err.println("Erreur Driver");}
catch (SQLException ex) { System.err.println("Erreur Localisation BD");}
}
}
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 12
Ajout et Modification de Données
Rappel SQL
Insérer un enregistrement
• INSERT INTO TableTest (champ1, ... , champN) VALUES (valeur1, ... ,
valeurN)
Modifier un enregistrement
• UPDATE TableTest SET champ1=valeur1, champ2=valeur2, ... WHERE
champN=valeurN
Supprimer un enregistrement
• DELETE FROM TableTest WHERE champN=valeurN
Rechercher dans une table
• SELECT champ1, champ2, ... FROM TableTest
• SELECT champ1, champ2, ... FROM TableTest WHERE champN=valeurN
• SELECT champ1, champ2, ... FROM TableTest WHERE champN=valeurN
ORDER BY champN
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 13
Paramétrage des requête
Objectif
Rendre plus flexible, plus dynamique l’accès aux bases
de données
Principe
Les objets à insérer dans une base de données sont
des variables (paramètres)
Les critères de rechercher dans une base de données
sont des variables (paramètres)
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 14
Paramétrage des requête
Requête paramétrée
Chaque paramètre est spécifié par un « ? »
Exemple
• SELECT * FROM employe WHERE nom = ?
Une requête paramétrée est utilisée via la classe
«PreparedStatement »
La méthode «preparedStatement» de la classe
Connection est utilisée à cet effet,
Exemple
String laRequete = "INSERT INTO employe (matricule, nom, prenom, fonction) VALUES(?,?,?,?)";
PreparedStatement instruction = connection.prepareStatement(laRequete);
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 15
Paramétrage des requête
Affectation des valeurs effectives
Elle utilise la méthode suivante de la classe PreparedStatement
• Void settypeParam(int positionParam, typeParm ValeurParam);
Exemple
instruction.setInt(1, vmatricule);
instruction.setString(2, vnom);
Exécution de la requête
instruction.executeQuery() (cas de consultion)
instruction.executeUpdate() (cas de mise à jour)
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 16
Paramétrage des requête
Exemple 1: insertion dans une base de donnée
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 17
Paramétrage des requête
Exemple 2 : Sélection suivant un critère
String laRequete = " SELECT * FROM ? WHERE nom = ? ";
PreparedStatement instruction = conn.prepareStatement(laRequete);
instruction.setString(1, "employe" );
instruction.setString (2, "ousmane" );
ResultSet rs = instruction.executeQuery();
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 18
Manipulation des résultats d’une requête
La classe ResultSet
Quelques méthodes
– String getString(int colonne);
– String getString(String nom du champ);
– int getInt(int);
– int getInt(String);
– boolean getBoolean(int);
– boolean getBoolean(String);
– byte getByte(int);
– byte getByte(String);
– short getShort(int);
– short getShort(String );
– long getLong(int );
– long getLong(String );
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 19
Manipulation des résultats d’une requête
La classe ResultSet
Quelques méthodes
• Public resultSetMetaData getMetaData()
• Public boolean relative (int n) throws SQLException;
• public boolean absolute(int row) throws SQLException;
• public boolean next() throws SQLException ;
• public boolean previous() throws SQLException
• public void beforeFirst() throws SQLException ;
• public boolean first() throws SQLException;
• public void afterLast() throws SQLException ;
• public boolean last() throws SQLException ;
• public int getRow() throws SQLException ;
• public void moveToInsertRow() throws SQLException
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 20
Les méta Données d’une base de données
La classe DatabaseMetaData
Donner des informations sur la base de donnée
Méthode Rôle
int getColumnCount() Nombre de colonnes du ResultSet
String getColumnName(int) Nom de la colonne de numéro donné
String getColumnLabel(int) Libellé de la colonne donnée
Renvoie le nom de l'ordinateur hôte ainsi que le
String getUserName( )
nom de l'utilisateur
String getDriverName() retourne le nom du driver utilisé
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 21
Les méta Données d’une base de données
Exemple
DatabaseMetaData bd = connexion.getMetaData();
System.out.println("Nom du Driver: "+ bd.getDriverName ());
System.out.println("User Name: "+ bd.getUserName ());
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 22
Les méta Données d’un résultat de requête
La classe ResultSetMetaData
Donner des informations sur un résultat
Méthodes Résultat
int getColumnCount( ) ; Nombre de colonne constituant la table
String getTableName( i ) ; Nom de la table
String getColumnName( i ) ; Renvoie le nom de la colonne i
String getColumnLabel( i ) ; Fournit le titre suggéré de la colonne
String getColumnTypeName( i ) ; Type de la colonne au sens base de données
int getColumnDisplaySize( i ); Taille de la colonne
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 23
Les méta Données d’un résultat de requête
Exemple
ResultSetMetaData meta = resultat.getMetaData ();
Int i = meta.getColumnCount()
Dr. GOORE BI Tra (+225) 07 90 39 73 goore@inphb.edu.ci 24