03/04/2021
JAVA DATA BASE
CONECTIVITY
Pr. Sarra ROUBI
LP Génie Informatique : S6
JDBC
Définition, Syntaxe & usage (complément cours S5
Java avancé)
1
03/04/2021
Introduction : Base de données
■ Rappel :
– Enregistrer les données (information) de façon organisée et
hiérarchique.
– La base de données (BDD, ou DB en anglais) est un système qui
enregistre des informations, mais pas n'importe comment : ces
informations sont toujours classées.
– Et c'est ça qui fait que la BDD est si pratique : c'est un moyen
extrêmement simple de ranger des informations
Introduction : Base de données
■ Il y’a un vocabulaire spécifique pour désigner les différents éléments
composant une BDD :
■ la base désigne le volume englobant l'ensemble, la boîte qui contient tous les
tableaux ;
■ une table désigne un tableau de données, elle contient des lignes et des
colonnes ;
■ une entrée désigne une ligne ;
■ un champ désigne une colonne.
2
03/04/2021
Introduction : SGBD
■ Il existe plusieurs SGBD :
■ MySQL : solution libre et gratuite, c'est le SGBD le plus répandu. C'est d'ailleurs celui que
nous allons utiliser dans ce cours !
■ PostgreSQL : solution libre et gratuite, moins connue du grand public mais proposant des
fonctionnalités inexistantes dans MySQL ;
■ Oracle : solution propriétaire et payante, massivement utilisée par les grandes entreprises.
C'est un des SGBD les plus complets, mais un des plus chers également ;
■ SQL Server : la solution propriétaire de Microsoft ;
■ DB2 : la solution propriétaire d'IBM, utilisée principalement dans les très grandes entreprises
sur des Mainframes.
Mise en place de JDBC
■ JDBC est c'est une API qui fait partie intégrante de la plate-forme Java, et qui
est constituée de classes permettant l'accès depuis vos applications Java à
des données rangées sous forme de tables. Dans la très grande majorité des
cas, il s'agira bien entendu de bases de données stockées dans un SGBD !
Les actions rendues possibles par cette API sont :
■ la connexion avec le SGBD ;
■ l'envoi de requêtes SQL au SGBD depuis une application Java ;
■ le traitement des données et éventuelles erreurs retournées par le SGBD lors
des différentes étapes du dialogue (connexion, requête, exécution, etc.).
3
03/04/2021
Mise en place de JDBC
■ JDBC est nativement prévu pour pouvoir s'adapter à n'importe quel SGBD !
Ainsi pour faire en sorte que notre application puisse dialoguer avec MySQL,
nous aurons simplement besoin d'ajouter à notre projet un driver qui est
spécifique à MySQL.
Chargement du driver
/* Chargement du driver JDBC pour MySQL */
try {
Class.forName( "com.mysql.jdbc.Driver" );
} catch ( ClassNotFoundException e ) {
/* Gérer les éventuelles erreurs ici. */
}
4
03/04/2021
Connexion à la Base de données
jdbc:mysql://nomhote:port/nombdd
■ nomhote : le nom de l'hôte sur lequel le serveur MySQL est installé. S'il est en place sur la
même machine que l'application Java exécutée, alors vous pouvez simplement
spécifier localhost. Cela peut également être une adresse IP comme 127.0.0.1. Au passage,
si vous rencontrez des problèmes de connectivité en spécifiant localhost et que l'utilisation
de 127.0.0.1 à la place les résout, alors vous avez un souci de configuration réseau (DNS,
hosts, etc.) ;
■ port : le port TCP/IP écouté par votre serveur MySQL. Par défaut, il s'agit du port 3306 ;
■ nombdd : le nom de la base de données à laquelle vous souhaitez vous connecter. En
l'occurrence, il s'agira pour nous de bdd_ecom.
jdbc:mysql://localhost:3306/bdd_ecom
Connexion à la Base de données
10
5
03/04/2021
Les requêtes
/* Création de l'objet gérant les requêtes */
■ Statement statement = connexion.createStatement();
/* Exécution d'une requête de lecture */
■ ResultSet resultat = statement.executeQuery( "SELECT id, email,
mot_de_passe, nom FROM Utilisateur;" );
11
Les requêtes
/* Exécution d'une requête de lecture */
ResultSet resultat = statement.executeQuery( "SELECT id, email, mot_de_passe, nom
FROM Utilisateur;" );
/* Récupération des données du résultat de la requête de lecture */
while ( resultat.next() ) {
int idUtilisateur = resultat.getInt( "id" );
String emailUtilisateur = resultat.getString( "email" );
String motDePasseUtilisateur = resultat.getString( "mot_de_passe" );
String nomUtilisateur = resultat.getString( "nom" );
/* Traiter ici les valeurs récupérées. */
}
12
6
03/04/2021
MODÈLE DAO
13
Pattern DAO
■ Isoler le stockage des données :
– L’idée est qu'au lieu de faire communiquer directement les objets
métier avec la base de données, ou le système de fichiers, ou
les webservices, ceux-ci vont parler avec la couche DAO.
– Et c'est cette couche DAO qui va ensuite de son côté communiquer
avec le système de stockage
14
7
03/04/2021
Pattern DAO
■ Isoler le stockage des données :
Ajouter()
Lister()
…
Ajouter()
Lister()
CRUD : …
Ajouter()
Lister()
…
Ajouter()
Lister()
…
15
DAO : Principe
■ Constitution :
– Séparer la couche modèle d'une application en deux sous-
couches distinctes :
■ une couche gérant les traitements métier appliqués aux données,
souvent nommée couche service ou métier. Typiquement, tout le travail
de validation réalisé dans les objets
■ une couche gérant le stockage des données, logiquement nommée
couche de données. Il s'agit là des opérations classiques de stockage :
CRUD.
16
8
03/04/2021
DAO : Principe
■ Constitution :
– Séparer il est nécessaire d'encapsuler les exceptions spécifiques
au mode de stockage dans des exceptions personnalisées et
propres à la couche DAO.
– masquer le code responsable du stockage au code « extérieur », et
l'exposer uniquement via des interfaces.
– Pour la relation entre la couche métier et le DAO, c'est très simple
: les objets métier appellent les méthodes CRUD, qui ont pour rôle
de communiquer avec le système de stockage et de peupler les
beans représentant les données.
17
DAO : Création
■ Voir TPs
18