Chapitre 13
JDBC
Introduction
JDBC (Java DataBase Connector) est une API chargé
de communiquer avec les bases de données en Java.
Les classes et interfaces de l’API JDBC figurent dans
le package [Link] : import [Link].*;
JDBC peut être utilisé pour accéder à n'importe quelle
base de données à partir de:
Simple application Java
Une servlet
Page JSP, …
20/06/2016 cours JEE - Dr. Abdessamad Belangour 626
1
Travail avec une base de données
JDBC permet de travailler avec les base de données
de la même façon quelque soit leur fournisseur
(Oracle, SQL Server, MySQL, PostgreSQL,…).
Il suffit de télécharger la bibliothèque qui assure la
communication entre Java et cette base de donnée.
Cette bibliothèque s'appelle Driver ou Pilote ou
Connecteur.
Elle figure sur le site du fournisseur du SGBDR utilisé.
20/06/2016 cours JEE - Dr. Abdessamad Belangour 627
Chargement du pilote
Dans ce cours nous allons prendre MySQL comme
exemple.
La version du Driver MySQL pour Java que nous allons
utiliser se nomme " mysql-connector-java-5.0.4-
[Link]"
Pour se connecter à une base de données il faut
charger son pilote.
La documentation de la Bdd utilisée fournit le nom de
la classe à utiliser.
Java - Dr A. Belangour 628
2
Chargement du pilote
Le chargement se fait comme suit :
[Link]("nom_classe_acces_bdd");
ou
[Link]("nom_classe_acces_bdd").newInstance();
Exemple :
Dans le cas de la Bdd MySQL, ce chargement est comme
suit : [Link]([Link])
Une fois chargée, la classe JDBC qui se nomme
DriverManager prend en charge le driver pour
communiquer avec la base de donnée.
20/06/2016 cours JEE - Dr. Abdessamad Belangour 629
Classes de l'API JDBC
Les classes et interfaces les plus usuelles sont les
suivantes:
DriverManager (classe): charge et configure le driver de la
base de données.
Connection (interface): réalise la connexion et
l'authentification à la base de données.
Statement (interface): contient la requête SQL et la
transmet à la base de données.
PreparedStatement (interface): représente une requête
paramétrée
ResultSet (interface): représente les résultat d'une requête
de sélection.
20/06/2016 cours JEE - Dr. Abdessamad Belangour 630
3
Etablissement de la connexion
Pour se connecter à une base de données, il faut
disposer d'un objet Connection créé grâce au
DriverManager en lui passant :
l'URL de la base à accéder , Le login, Le mot de passe
Exemple avec MySQL:
String url="jdbc:mysql://localhost/mydb";
String login="root";
String password="motdepasse";
Connection con=[Link](url,
login, password);
20/06/2016 cours JEE - Dr. Abdessamad Belangour 631
Exécution de requêtes SQL
L'interface Statement permet d'envoyer des requêtes
SQL à la base de données.
Un objet Statement est créé grâce à un objet Connection
de la façon suivante : Statement st = [Link]();
Il possède deux méthodes :
executeUpdate() : Insertion, suppression, mise à jour.
int n= [Link]("INSERT INTO Etudiant VALUES
(3452,'Taha','Ali')");
executeQuery() : Selection.
ResultSet res= [Link]("SELECT * FROM
Etudiant");
20/06/2016 cours JEE - Dr. Abdessamad Belangour 632
4
Requêtes avec paramètres
L'interface preparedStatement permet d'envoyer
des requêtes SQL à la base de données en prenant
des paramètres.
Ces paramètres sont représentés par des points
d'interrogation(?) et doivent être spécifiés avant
l'exécution.
Exemple :
PreparedStatement p= [Link](
"select* from Etudiant where cne=? And nom= ? ");
Java - Dr A. Belangour 633
Requêtes avec paramètres
[Link](1, 3452345);
[Link](2, "Alaoui");
resultats = [Link]();
Java - Dr A. Belangour 634
5
Résultat d’une requête de sélection
Une requête de sélection retourne un ResultSet
ResultSet est un ensemble d'enregistrements
constitués de colonnes qui contiennent les données.
Les principales méthodes :
next() : se déplace sur le prochain enregistrement :
retourne false si la fin est atteinte. Le curseur pointe
initialement juste avant le premier enregistrement.
getInt(int/String) : retourne le contenu de la colonne dont
le numéro (resp. le nom) est passé en paramètre sous
forme d'entier.
20/06/2016 cours JEE - Dr. Abdessamad Belangour 635
Résultat d’une requête de sélection
getFloat(int/String) : retourne le contenu de la colonne
sous forme de nombre flottant.
getDate(int/String) : retourne le contenu de la colonne
sous forme de date.
Close() : ferme le ResultSet
Java - Dr A. Belangour 636
6
Résultat d’une requête de sélection
Exemple :
ResultSet res= [Link]("SELECT * FROM Etudiant");
while ([Link]()) {
[Link]("CNE= "+[Link](1)+" Nom= " +
[Link](2)+" Prénom= "+[Link](3));
[Link]();
20/06/2016 cours JEE - Dr. Abdessamad Belangour 637
Exemple complet
import [Link].*;
public class Main {
public static void main(String[] args) {
String url="jdbc:mysql://localhost/etudiantsDB";
String driver = "[Link]";
try {
[Link](driver).newInstance();
Connection con=[Link](url,"root","");
Statement st = [Link]();
Java - Dr A. Belangour 638
7
Exemple complet
ResultSet res= [Link]("SELECT * FROM Etudiant");
while ([Link]()) {
[Link]("CNE= "+[Link](1)+" Nom= "
+[Link](2) + " Prénom= "+[Link](3 ));
[Link]();
[Link]();
[Link]();
Java - Dr A. Belangour 639
Exemple complet
catch (Exception e) {
[Link]("Erreur : " + [Link]() + " source : " +
[Link]());
Java - Dr A. Belangour 640
8
Métadonnées sur la base de données
Il est possible aussi d’obtenir des informations sur la
base de données grâce aux objets suivants :
DatabaseMetaData : informations à propos de la base de
données : nom des tables, index, version ...
ResultSetMetaData : informations sur les colonnes (nom
et type) d'un ResultSet
20/06/2016 cours JEE - Dr. Abdessamad Belangour 641
Métadonnées sur la base de données
Exemple :
try {
ResultSetMetaData meta= [Link]();
int nbCols = [Link]();
while ([Link]()) {
for (int i = 1; i <= nbCols; i++)
[Link](ré[Link](i) + " ");
[Link]();
catch (SQLException e) { //traitement de l'exception }
Java - Dr A. Belangour 642