Vous êtes sur la page 1sur 4

Faculté des sciences économiques et AU : 2023/2024

de gestion de Sfax

Enseignants : N. Zaaboub Haddar,


M. Ben Abdallah,
W. Maghrebi
Filière : LFI 2
Matière : Programmation OO Avancée

PROGRAMMATION ORIENTEE OBJET AVANCEE


TP N° 3 : CONNEXION ET COMMUNICATION AVEC UNE BASE DE
DONNEES RELATIONNELLE

Objectifs du TP :
L’objectif de ce TP est de vous familiariser avec la lecture et l’écriture dans une bases de
données relationnelles à partir de programmes JAVA.

Exercice :
Nous nous proposons d’écrire un programme java qui permet de gérer les absences des
étudiants dans les séances du cours POO Avancée. Ce programme doit communiquer avec
une base de données relationnelle gérée par Oracle (ou MySQL). La structure de la base de
données est la suivante :

Figure 1. Structure de la base de données BDAbsences.

1
Partie1 :
1. Téléchargez le script "OracleBDAbsences.sql" ("MySQLBDAbsences.sql" pour ceux
qui utilisent oracle) que vous trouvez sur la plateforme de l’UVT. Ce script permet de
créer les tables de la base de données dont la structure est donnée par la Figure 1 ci-
dessus.
2. Lancez le serveur de données. Créer éventuellement la base de données, puis
importez et exécutez le script .sql.
3. Créez un projet dans Eclipse que vous nommez "GestionAbsences". Ajoutez un pilote
JDBC adéquat à votre projet.
4. Ajoutez dans ce projet un package "entites" et définissez-y les classes du diagramme
de la Figure 2 suivante.

Figure 2. Classes du package entites

NB. : Vous pouvez ajouter à votre projet tout ce que vous jugez nécessaire pour le bon
fonctionnement de l’application.

Partie2 :

NB. :
• Utilisez partout des requêtes paramétrées.
• Toute exception SQLException doit être capturée et une boite de dialogue doit
être affichée à l’écran expliquant la cause de l’exception. L’instruction
permettant l’affichage d’une boite de dialogue est la suivante :

javax.swing.JOptionPane.showMessageDialog (null, "message");

1. En vous aidant de la Figure 3, définissez dans un nouveau package "accesBD" les


classes SConnection, EtudiantDAO et SeanceDAO.

2
Figure 3. Spécification des classes SConnection, EtudiantDao et SeanceDao.

La classe SConnection décrit les paramètres d’une connexion à une base de données
relationnelle, représentés par les attributs statiques : url, utilisateur, mdp et cnx. Cette
classe offre les services suivants :
• la méthode Connection getInstance() : elle permet d’établir une nouvelle
connexion à cnx, si celle-ci n’existe pas déjà ou si elle est fermée ;
• la méthode void close() : elle permet de fermer la connexion cnx ouverte.
Par ailleurs, la classe EtudiantDao offre les services suivants :
• la méthode Etudiant findByMatricule(String mat) : elle cherche dans la table
Etudiant et retourne l’étudiant ayant le matricule donné en paramètre. Si elle ne
le trouve pas, elle renvoie null.
• la méthode void save (Etudiant e) : elle ajoute l’étudiant e à la table Etudiant.
• la méthode Collection<Etudiant> findAll() : elle renvoie une collection de tous
les étudiants de la table Etudiant.
Les méthodes de la classe SeanceDao sont :

• la méthode Seance findByDateDebut(LocalDateTime d) : elle cherche dans


la table Seance et retourne la séance ayant la date de début donnée en
paramètre. Si elle ne la trouve pas, elle renvoie null.
• la méthode void save (Seance s) : elle ajoute la séance s à la table Seance.
• la methode void updateDuree(LocalDateTime d, int nouvelleDuree) :
remplace la durée de la séance ayant la date de début d par nouvelleDuree.

2. Définissez un nouveau package tests et ajoutez-y une classe Test et la méthode


main(). Ajoutez les instructions nécessaires pour tester toutes les méthodes des
classes EtudiantDao et SeanceDao.

3
Partie3 :
1. En vous aidant de la Figure 4, définissez dans le même package ‘’accesBD’’ la classe
AbsenceDao.

Figure 4. Spécification de la classe AbsenceDao.

La classe AbsenceDao offre les services suivants :


• void save(Absence a) : qui permet d’ajouter l’absence a à la table absence.
• void delete(Etudiant e, Seance s) qui permet de supprimer l’absence de
l’étudiant e de la séance s.
• Collection<Absence> findByEtudiantAndDate (Etudiant e, LocalDate d1,
LocalDate d2) : Elle renvoie les absences d’un étudiant entre les dates d1 et d2.
• Map<Etudiant, Integer> findNbreAbsences() : elle renvoie pour chaque
étudiant le nombre de ses absences.
2. Ajoutez dans la méthode main( ) de la classe Test les instructions permettant de tester
toutes les méthodes de la classe AbsenceDao.

Vous aimerez peut-être aussi