0% ont trouvé ce document utile (0 vote)
172 vues13 pages

JDBC et DAO en Architecture MVC

Le document présente une introduction à JDBC, une API Java pour accéder aux bases de données via SQL, en détaillant son architecture, les types de pilotes, et les étapes de connexion. Il aborde également les modèles de conception DAO et MVC, soulignant leur rôle dans la séparation des préoccupations entre la logique métier et l'accès aux données. Enfin, il décrit un projet pratique de gestion de paie utilisant JDBC et le pattern DAO, avec des objectifs pédagogiques clairs pour les étudiants.

Transféré par

jeanlucarandriatahina
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
172 vues13 pages

JDBC et DAO en Architecture MVC

Le document présente une introduction à JDBC, une API Java pour accéder aux bases de données via SQL, en détaillant son architecture, les types de pilotes, et les étapes de connexion. Il aborde également les modèles de conception DAO et MVC, soulignant leur rôle dans la séparation des préoccupations entre la logique métier et l'accès aux données. Enfin, il décrit un projet pratique de gestion de paie utilisant JDBC et le pattern DAO, avec des objectifs pédagogiques clairs pour les étudiants.

Transféré par

jeanlucarandriatahina
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

JDBC-DAO-MVC

S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025

JDBC
JDBC est une API Java i.e. ensemble de classes et d'interfaces permettant d'accéder aux bases
de données à l'aide du langage Java via des requêtes SQL.

Cette API permet d'atteindre de manière quasi-transparente des bases (MySQL,Sybase,


Oracle, SQLite, ... avec le même programme Java JDBC.

Cette API est une spécification de ce que doit implanter un constructeur de BD pour que celle
ci soit interrogeable par JDBC.

Donc dans la programmation JDBC on utilise essentiellement des interfaces (Connection,


Statement, ResultSet, ...).

Sun/Oracle et les autres constructeurs de BD se sont charger de fournir (vendre ou donner)


des classes qui implémentent les interfaces précitées qui permettent de soumettre des requêtes SQL
et de récupérer le résultat.

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
1
Pilotes (drivers)
L'ensemble des classes qui implémentent les interfaces spécifiées par JDBC pour un
gestionnaire de bases de données particulier est appelé un pilote JDBC.

L'interface Driver, décrit ce que doit faire tout objet d'une classe qui implémente l'essai de
connexion à une base de données. Entre autre, un tel objet doit obligatoirement s'enregistrer auprès
du DriverManager (avant JDBC 4 ) et retourner en cas de succès un objet d'une classe qui
implémente l'interface Connection.

Architecture JDBC

Programme Java (Développeur) → DriverManager (Sun/Oracle) →Driver <→ BD

Les 4 types de pilotes


Type 1 et 2 : native/ librairie dynamique (odbc)(rapide)

Type 3 et 4 : écrit en Java

Le type 4 peut accéder directement aux interfaces réseaux de la base

Structure d'un programme

Un code JDBC est de la forme :

- recherche et chargement du driver approprié à la BD.


- établissement de la connexion à la base de données.
- construction de la requête SQL
- envoi de cette requête et récupération des réponses
- parcours des réponses.

[Link]("pilote");
Connection con = [Link](...);
Statement stmt = [Link]();
ResultSet rs = [Link]("SELECT A, B, C ... FROM T WHERE ...");
while ([Link]()) {
traitement
}

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
2
Protocole de l'URL JDBC (TPE : voir la classe URL, Properties, Resources, JTable et TableModel)

Une URL JDBC doit commencer par jdbc.


Le second argument est le protocole sous jacent dans lequel le pilote traduit.
Le troisième argument est un identificateur de base de données.

La syntaxe d'une URL JDBC est donc:

- jdbc:<sous-protocole>:<baseID>
o la partie baseID est propre au sous-protocole.

o On peut aussi utiliser les propriétés avec DriverManager :


[Link](String url, Properties properties);

Chargement du pilote et

On commence un programme JDBC en chargeant dans le programme, le pilote approprié


pour la BD. Comme le programme peut interroger divers types de BD il peut avoir plusieurs pilotes.
C'est au moment de la connexion que sera choisi le bon pilote par le DriverManager :

[Link]("[Link]") → chargement

Enregistrement au sein du DriverManager via la méthode static registerDriver(...)

- Enregistrement d’un pilote JDBC


- Chargement explicite d'un pilote antérieur à JDBC4 :
- L'appel à forName() déclenche un chargement dynamique du pilote.
- Un programme peut utiliser plusieurs pilotes, un pour chaque base de données.
- Le pilote doit être accessible à partir de la variable d'environnement CLASSPATH.
- Le chargement explicite est inutile à partir de JDBC 4

private String driverName = "[Link]";


void loadDriver() throws ClassNotFoundException {
[Link](driverName);
}

- Processus de Connexion : Le DriverManager


import [Link]; // gestion des pilotes

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
3
import [Link]; // une connexion à la BD
import [Link]; // une instruction
import [Link]; // un résultat (lignes/colonnes)
import [Link]; // les erreurs liées à la BD
public class JDBCAppli {
// 0- chargement du pilote (pour JDBC antérieur à JDBC4)
// 1- ouverture de connexion
// 2- exécution d'une requête
// 3- programme principal
}

- Créer une connexion


Méthode getConnection() de DriverManager :
Connection conn = [Link](URL url, userid, password);
..varie selon le driver
String url = ?
"[Link]"
"[Link]"
"[Link]" // pour ACCESS (avant Java 8)
"jdbc:sqlite:" + FilePath"; // [Link]
voir les autres drivers
...

Requêtes aux bases de données

Il existe des sortes de requêtes SQL dont :


- les requêtes SELECT qui opèrent sur une ou plusieurs tables et placent le résultat dans une
Table
- les requêtes d'action qui modifient une ou des colonnes ou lignes de table. On a par
exemple comme requête
d'action UPDATE, DELETE, APPEND.
- des SQL DDL (Data Définition Language) comme CREATE TABLE, DROP TABLE, ...

Syntaxiquement en Java on utilise executeQuery(...) si la requête est une requête


SELECT et executeUpdate(...) si a requête est une requête d'action ou une SQL DDL.

On utilise l'un des interfaces Statement, PreparedStatement (instruction compilé et/ou


paramétré), CallableStatement. Les
instructions PreparedStatement sont précompilées.
On utilise CallableStatement pour lancer une procédure du SGBD (procédure stockée).

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
4
JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
5
Récupération des résultats
Statement

- Les résultats des requêtes SELECT ont été mis dans un ResultSet. Cet objet récupéré
modélise le résultat qui peut être vu comme une table.

- Un pointeur/curseur géré par Java jdbc permet de parcourir tout le ResultSet et est
initialisé : il est automatiquement positionné avant la première ligne de résultat.

- On parcourt alors tout le ResultSet pour avoir l'ensemble des réponses à la requête.
La boucle de parcours est :

while( [Link]() ) {
// traitement
}

- Les colonnes demandées par la requête sont numérotées à partir de 1

- La numérotation est relative à l'ordre des champs de la requête et non pas l'ordre
des champs de la table interrogée.

- Les colonnes sont typées en type SQL. Pour récupérer une valeur de colonne il faut
donc indiquer le numéro de la colonne ou son nom et faire la conversion de type
approprié. Par exemple :

Statement stmt = ...


ResultSet rs = [Link](SELECT nom, prenom, age,date FROM Personne");
String nom = [Link]( 1 );
String prenom = [Link]( 2 );
int age = [Link] ( 3 );
Date date = [Link]( 4);

- On peut aussi désigner les colonnes par leur nom dans la (moins rapide mais plus
lisible).

Statement stmt = ...


ResultSet rs = [Link]("SELECT nom, prenom, age,date FROM Personne");
String nom = [Link]("nom");
String prenom = [Link]( "prenom");
int age = [Link] ("age");
Date date = [Link]( "date");

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
6
PreparedStatement

Lors de l'envoi d'une requête pour exécution 4 étapes doivent être faites :
- analyse de la requête
- compilation de la requête
- optimisation de la requête
- exécution de la requête

Les bases de données définissent la notion de requête compilée, requête où les 3


premières étapes ne sont effectuées qu'une seule fois : PreparedStatement (des requêtes où
un des arguments est une variable i.e. requêtes paramétrées).

Syntaxe :

PreparedStatement pSmt = [Link]("SELECT * FROM Personne" );


ResultSet rs = [Link]();// même sans paramètres

Requête décrite au moment de la "construction" mais non pas lors de l'exécution qui
est lancée par executeQuery()

On écrit la requête
SELECT nom FROM Personnes WHERE age > ? AND prenom = ?

Puis on utilise les méthodes


- set<Type>(numéro/index de l-argument, valeur) pour positionner chacun des
arguments.
- Les numéros commencent à 1 dans l'ordre d'apparition dans la requête.

Exemple
PreparedStatement pSmt = [Link]("SELECT nom FROM Personne
WHERE age > ? AND prenom = ?" );
pSmt .setInt(1, 18);
pSmt .setString(2, "jean paul");
ResultSet rs = [Link]();

MetaData

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
7
On peut avoir sur une BD, des informations sur la BD elle même. Ces informations
sont appelées des métadata.
On obtient un objet de la classe DatabaseMetaData à partir de la connexion par :

DatabaseMetaData DBMeta = [Link]();

De même on peut avoir des métadata sur un ResultSet :

rs = [Link]( "SELECT * FROM Personne " );


ResultSetMetaData rsmd = [Link]();
int colonnes = [Link]();
for ( int i = 1; i <= colonnes; i++ ){
[Link]( "\t" + i + " : " + [Link]( i ) );
}

JDBC : les essentiels

• Les principes : API Java, drivers des BD


• Les principaux éléments, leurs noms (paramètres et propriétés)
• La connexion ou Pool de connexions (DataSource)
• Les principes d’exécution de requêtes
Les interfaces Statement, PreparedStatement, CallableStatement, etc.
Les méthodes execute(), executeUpdate()
L’exploitation des résultats avec ResultSet
• L’utilisation de DAO, le principe d’un Singleton

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
8
Le Pattern MVC et Le Pattern DAO

- Le pattern MVC est utilisé pour l'interaction entre les couches métiers et
présentation (voir autre slide)
- Le pattern DAO (Data Access Object) : pour le modèle, on détaille l'implémentation
des accès aux données
- Isoler la gestion de la persistance dans des objets spécifiques : Découpler Métier /
Persistance

Architecture DAO :

- l'appli Java n'a aucune idée sur l'accès aux données : elle utilise le DAO
- la couche DAO s'occupe de tous les accès aux bases de données

APPLI → DAO[S](API/Model)(service)→(commandes SQL) BD

[Link]() →create()→ ...

Principe du pattern DAO

 Proposer, pour les objets métiers :


– une interface de la gestion de la persistance (services CRUD)
• Create : création d'une nouvelle entité
• Read/ Retrieve : lire / rechercher des entités
• Update : modifier une entité
• Delete : supprimer une entité
– indépendante de la source de donnés
– et d'autres fonctionnalités métier

Intérêts du DAO

• Au niveau de la couche métier


– Il n’y a plus de requêtes SQL ou d’ordres de connexion spécifiques codés en dur dans les
objets Métier
– L’accès aux données se fait uniquement par des objets DAO
– On masque le mapping objet-relationnel (ORM)
• Au niveau de la couche d'accès aux données
– La maintenance des accès BD est facilitée : la source de données peut être modifiée sans
impacter la couche métier
– Factorisation du code d'accès aux données

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
9
– Sécurité, fiabilité des accès

L'interface d'objet DAO

• Expose les fonctionnalités CRUD indépendantes de l'implémentation


• Aucune des méthodes spécifiées ne doit contenir de requête SQL en
Paramètre
• Doit proposer une gestion personnalisée des exceptions
– les exceptions standards sont attrapées et redirigées vers une ou des
Exceptions particulières
– gérées par une ou plusieurs classes d'exceptions indépendantes du support de persistance

L'implémentation d'objet DAO

• Un seul objet DAO créé par classe métier


– il y a donc autant d'objets DAO que de classes métier
• L'application ne manipule que les objets métier
– seuls les objets métier utilisent les services de leur DAO
• Création des objets DAO
– les objets DAO dépendent de la source de données
– il existe donc une famille d'objets DAO par type de source de données (Fichier,Sérialisation,
BD,...)

Structure et Packages :

[Link]
[Link]
[Link]

Le pattern Factory

On utilise généralement le pattern Factory si on a plusieurs Source de données ou BD :


DAOFactory

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
10
TP1 : JDBC avec NetBeans
-Premier pour faire fonction une application Java JDBC : base embarquée/fichier avec sqlite

10-03-2025

Projet : Gestion de Paie D'une Société


Vous allez créer une application pour démontrer la base de l'architecture Modèle-Vue-Contrôleur
(MVC) en utilisant Swing et JDBC ainsi que le pattern DAO. Elle permet aux utilisateurs :

- d'ajouter un Employé
- de calculer le salaire brut et net
- de gérer le contrat et divers avantages (indemnité, prime,...)
- ...
- Impression et exportation en PDF

Les Objectifs principaux de ce TPE (dans l'ordre bien précis) sont de permettre aux étudiants de :

1. Utiliser/maitriser l'architecture MVC avec swing


2. Utilisation du pattern DAO pour l'accès aux données
3. Maitriser Swing

Donc, la notation du projet se base sur le respect de l'architecture mais non pas aux détails de la
spécification/besoin de l'utilisateur du projet : on peut améliorer les algorithmes et objets métiers au
fur et à mesure.

Les classes métiers de l'application sont :

- Société (Dénomination, ...)


- Employé/Salarié (ID, État Civil, Poste,... )
- Avantage/Prime (ID, Type, Montant, Active,...)
- Contrat (ID, Type, Début, Fin, Salaire Brut, Active, ...)
- Cotisation/Taxe/Impôt (Type, Montant, ...)
- Bulletin de Paie (Salaire Net et Brut, Date, ...)
- Exercice (ID, Début, Fin, ...)

Les relations entres classes sont généralement les suivantes :

On vous donne un squelette (voir le projet netbeans) de l'application et essaie de suivre les
paquetages

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
11
- [Link] ou beans ou model ou entity ou domain
Employe
- [Link]
IEmploye : interface
AEmployeDAO : classe abstraite (optionnelle)
- CEmployeDAO : implémentation (généralement dans un sous-package, par exemple pour
sqlite, mysql)→ [Link] et [Link]
On peut créer une classe (abstraite ou interface) DataSource pour JDBC qui donne la
Connexion à une base
- [Link] ou business ou métier
EmployeService : des méthodes utiles selon les spécifications et besoins
Le service exploite les classes métiers et les model
- [Link] ou présentation
- [Link]
EmployeController : on peut créer un contrôleur par service/entité ou un contrôleur global
ou les 2
- [Link]

public class PrimeEmployee {


Long id;
Employee employee;
Prime prime;
Date dateDebut;
Date dateFin;
Boolean isActive;
}

public class Prime {


Long id;
String libelle;
Double montant;
TypePrime typePrime;

//
List< PrimeEmployee > list;
}

public class TypePrime {


Long id;
String libelle;
List<Prime> primes;
}

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
12
Étapes :

- les clasess models


- classe DAO pour Test (Ex DummyEmployeDAO en memoire)
- les classes services (selon les relations)
- DAO

En paralle les classes relatives aux vues et Controlleurs

JDBC-DAO-MVC
S8 MISS - S5 EA2I - Faculté Des Sciences - Année Universitaire 2024-2025
13

Vous aimerez peut-être aussi