Plan
JDBC: Java database connectivity
o Introduction
o Pilote et gestionnaire de pilotes
o Accès aux Base de Données
2
Introduction
Hibernate : Framework ORM pour le
mappage objet-relationnel.
Spring Data : Ensemble de bibliothèques
facilitant l'accès aux bases de données dans
le cadre du projet Spring.
Spring JDBC : Module Spring simplifiant
l'utilisation de JDBC avec des classes
utilitaires.
EclipseLink : Implémentation JPA avec des
fonctionnalités avancées.
3
Introduction
• JDBC : Java DataBase Connectivity
• Qui : Sun
• Quoi : deux librairies (accessibles dans Java 1.4)
– [Link] : JDBC 2.0 Core API
– [Link] : JDBC 2.0 Optional Package API
• Objectif :
– Accéder aux SGBD à l'aide de requètes SQL
– Récupérer les résultats en Java
– Le type de la base est transparent (Sybase, Oracle,
MySql, Access …) généricité, standardisation
4
Pilote et gestionnaire de pilotes
"Driver et driver manager"
• Classe [Link] :
– Le gestionnaire de pilotes offert par la JVM
• Interface [Link]
– Définit le point d'entrée de tout accès à une base
5
JDBC dans un client léger
6
JDBC dans une architecture J2EE
Architecture d'exécution répartie dans la
plateforme J2EE :
7
Pilote et gestionnaire de pilotes
Un même driver peut piloter
plusieurs bases
Java JDBC Driver SGBD2
SGBD1
DriverManager
Nommage
Java externe
8
Accès aux Base de Données
Il y a Cinq étapes :
1. Charger un pilote
2. Créer une connexion à la base
3. Créer une requête (Statement)
4. Exécuter une requête
5. Présenter les résultats
9
PROJET PILOTE BD
Tables
10
Accès aux Base de Données
Chargement du pilote
Ouverture de connexion
Exécution d’une requête
Programme principal
11
Première étape
"charger un pilote"
12
Charger un pilote
• Classe [Link]
– Fournit les utilitaires de gestion des connexions et
des pilotes
– Elle ne contient que des méthodes statiques
• Les pilotes sont chargés dynamiquement
– implicitement en instanciant la "system property"
[Link]
– explicitement par la méthode statique forName() de
la classe Class
13
Charger un pilote
[Link]("[Link]");
14
Seconde étape
"Créer une connexion à la base"
15
Créer une connexion à la base
Etablir une connexion est d'avoir le pilote
approprié pour se connecter à votre SGBD.
Cette ligne de code illustre l'idée :
Connection CON=
[Link](url,"MonLogin","MonMotDePasse");
Exemple :
16
Troisième étape
"Créer une requète"
17
Trois types de requêtes
• Requètes simples Statement
– [Link]
• Requètes Précompilées
PreparedStatement
– [Link]
– Pour une opération réalisée à plusieurs
reprises CallableStatement
• Procédures stockées
– [Link]
– Pour lancer une procédure du SGBD
18
Interface [Link]
• Initialisation
Connection con = getConnection();
Statement stmt = [Link]();
• Exécuter une requête
String sql = "SELECT * FROM fournisseur";
ResultSet rs = [Link](sql);
19
Quatrième étape
"Exécuter une requête"
20
Interface [Link]
• Requêtes "select" retournant un tableau
Statement stmt = [Link]();
String sql = "SELECT * FROM fournisseur";
ResultSet rs = [Link](sql);
• Requètes de mise à jour et de création
Statement stmt = [Link]();
String sql = "INSERT INTO Customers " +
"VALUES (1001, 'Simpson', 'Mr.', " +
"'Springfield', 2001)";
int i = [Link](sql);
21
executeQuery ()
• Pour lancer une requète "SELECT" statique
Statement stmt = [Link]();
String s = "select * from employes";
ResultSet rs = [Link](s);
• Un ResultSet est un objet qui modélise un tableau à
deux dimensions
– Lignes (row)
– Colonnes (valeurs d'attributs)
22
executeUpdate ()
INSERT INTO
• Pour lancer une requète INSERT
Statement stmt = [Link]();
String s = "INSERT INTO test (code,val)" +
"VALUES(" + valCode + ", '" +val +"')";
int i = [Link](s);
• Le résultat est un entier donnant le nombre de lignes
créées
23
executeUpdate () - 2
UPDATE
• Pour lancer une requète UPDATE
Statement stmt = [Link]();
String s = "UPDATE table
SET column = expression
WHERE predicates";
int i = [Link](s);
• Le résultat est un entier donnant le nombre de
mises-à-jour
24
executeUpdate () - 3
DELETE
• Pour lancer une requète DELETE
Statement stmt = [Link]();
String s = "DELETE FROM table
WHERE predicates";
int i = [Link](s);
• Le résultat est un entier donnant le nombre de
d’effacements
25
Cinquième étape
"Présenter les résultats"
26
Récupération des résultats
[Link] stmt =
[Link]();
String s = "SELECT a, b, c FROM Table1";
ResultSet rs = [Link](s);
while ([Link]()) {
int i = [Link]("a");
String s = [Link]("b");
byte b[] = [Link]("c");
[Link]("ROW = " + i +
" " + s + " " + b[0]);
}
27
Objets ResultSet
ResultSet rs = [Link](s);
• Se parcourt itérativement row par row
• Les colonnes sont référencées par leur
numéro ou leur nom
• L'accès aux valeurs des colonnes se fait par
des méthodes getXXX() où XXX représente le
type de l'attribut se trouvant dans la colonne
28
Fin
29