0% ont trouvé ce document utile (0 vote)
7 vues27 pages

Support Cours Java POO MySQL

Ce support de cours aborde la programmation orientée objet en Java et l'utilisation de MySQL pour les étudiants de deuxième année en informatique. Il couvre les concepts fondamentaux de Java, y compris l'architecture, les types de données, les structures de contrôle, ainsi que les classes et objets, tout en fournissant des exercices pratiques. Les étudiants apprendront à créer des programmes Java, à manipuler des classes et à appliquer les principes de l'encapsulation et de l'héritage.

Transféré par

amansante1
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)
7 vues27 pages

Support Cours Java POO MySQL

Ce support de cours aborde la programmation orientée objet en Java et l'utilisation de MySQL pour les étudiants de deuxième année en informatique. Il couvre les concepts fondamentaux de Java, y compris l'architecture, les types de données, les structures de contrôle, ainsi que les classes et objets, tout en fournissant des exercices pratiques. Les étudiants apprendront à créer des programmes Java, à manipuler des classes et à appliquer les principes de l'encapsulation et de l'héritage.

Transféré par

amansante1
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

Support de Cours Java — POO & MySQL | SIL 2ème Année

UNIVERSITÉ
Département Système Informatique et Logiciel

SUPPORT DE COURS

Programmation Java — POO & Bases de Données

Deuxième Année
Cours Magistraux · Travaux Pratiques · Exercices Corrigés

IDE : NetBeans · Base de données : MySQL · JDK 17+

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

CM1 — Introduction au langage Java


1. Qu'est-ce que Java ?
Java est un langage de programmation orienté objet, créé par Sun Microsystems en 1995. Il est
aujourd'hui l'un des langages les plus utilisés au monde, notamment dans les applications
d'entreprise, les applications Android et les systèmes embarqués.

Philosophie Java

Write Once, Run Anywhere (WORA) : un programme Java compilé s'exécute sur toute
machine disposant de la JVM.

Java est fortement typé : chaque variable a un type défini à la compilation.

La gestion de la mémoire est automatique grâce au Garbage Collector.

2. Architecture Java : JDK, JRE, JVM

Composant Rôle

JDK (Java Development Kit) Environnement de développement complet : compilateur


(javac), bibliothèques, outils de débogage

JRE (Java Runtime Environment) Environnement d'exécution : JVM + bibliothèques


standards

JVM (Java Virtual Machine) Machine virtuelle qui exécute le bytecode Java sur
n'importe quel système d'exploitation

3. Types primitifs

Type Taille Valeurs

int 32 bits Entiers : -2 147 483 648 à 2 147 483 647

double 64 bits Nombres décimaux à virgule flottante

boolean 1 bit true ou false

char 16 bits Un seul caractère Unicode

long 64 bits Grands entiers

String Objet Chaîne de caractères (pas primitif mais très utilisé)

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

4. Premier programme Java


Tout programme Java contient une classe principale et une méthode main qui est le point d'entrée
de l'application.

public class Bonjour {


public static void main(String[] args) {
// Affichage dans la console
[Link]("Bonjour, étudiants SIL !");

// Variables
int age = 20;
double moyenne = 14.5;
String nom = "Alice";

[Link]("Nom : " + nom + ", Age : " + age);


}
}

5. Structures de contrôle
5.1 Condition if/else
int note = 12;
if (note >= 10) {
[Link]("Admis");
} else if (note >= 8) {
[Link]("Rattrapage");
} else {
[Link]("Refusé");
}

5.2 Boucle for


// Afficher les nombres de 1 à 5
for (int i = 1; i <= 5; i++) {
[Link]("Nombre : " + i);
}

5.3 Boucle while


int compteur = 0;
while (compteur < 3) {
[Link]("Tour : " + compteur);
compteur++;
}

6. Méthodes
Une méthode est un bloc de code réutilisable qui effectue une tâche précise. Elle peut recevoir des
paramètres et retourner un résultat.
public class Calculs {
// Méthode qui retourne la somme de deux entiers
public static int additionner(int a, int b) {
return a + b;

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

// Méthode sans retour (void)


public static void afficherBonjour(String prenom) {
[Link]("Bonjour " + prenom + " !");
}

public static void main(String[] args) {


int resultat = additionner(5, 3);
[Link]("5 + 3 = " + resultat);
afficherBonjour("Koffi");
}
}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

TP1 — Prise en main de NetBeans et bases Java

Objectifs du TP

Installer et configurer NetBeans avec le JDK 17.

Connecter MySQL dans l'onglet Services de NetBeans.

Créer et exécuter ses premiers programmes Java.

Partie 1 — Installation et configuration


1. Télécharger et installer le JDK 17 depuis [Link]
2. Télécharger Apache NetBeans depuis [Link]
3. Installer MySQL Server et noter le mot de passe root lors de l'installation.
4. Dans NetBeans : menu Fenêtre → Services → Bases de données → Nouvelle connexion →
choisir MySQL.

Partie 2 — Exercices

Exercice 1 — Hello World

Créez un nouveau projet Java dans NetBeans nommé TP1.

Dans la classe principale, affichez votre nom, prénom et filière.

Compilez et exécutez le programme.

// Exemple de solution attendue :


public class Main {
public static void main(String[] args) {
[Link]("Nom : Dupont");
[Link]("Prénom : Jean");
[Link]("Filière: SIL 2");
}
}

Exercice 2 — Calculatrice simple

Écrivez une méthode pour chaque opération : addition, soustraction, multiplication,


division.

Appelez chaque méthode depuis le main avec les valeurs 10 et 4.

Gérez la division par zéro avec un message d'erreur approprié.

Corrigé
public class Calculatrice {
public static int addition(int a, int b) { return a + b; }

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

public static int soustraction(int a, int b) { return a - b; }


public static int multiplication(int a, int b) { return a * b; }
public static double division(int a, int b) {
if (b == 0) {
[Link]("Erreur : division par zéro !");
return 0;
}
return (double) a / b;
}
public static void main(String[] args) {
[Link]("10 + 4 = " + addition(10, 4));
[Link]("10 - 4 = " + soustraction(10, 4));
[Link]("10 x 4 = " + multiplication(10, 4));
[Link]("10 / 4 = " + division(10, 4));
}
}

Exercice 3 — Tableau de notes

Déclarez un tableau de 5 notes entières.

Écrivez une méthode calculerMoyenne(int[] notes) qui retourne la moyenne.

Écrivez une méthode trouverMax(int[] notes) qui retourne la note maximale.

Affichez la moyenne et le maximum dans le main.

Corrigé
public class Notes {
public static double calculerMoyenne(int[] notes) {
int somme = 0;
for (int n : notes) somme += n;
return (double) somme / [Link];
}
public static int trouverMax(int[] notes) {
int max = notes[0];
for (int n : notes) if (n > max) max = n;
return max;
}
public static void main(String[] args) {
int[] notes = {12, 15, 9, 18, 11};
[Link]("Moyenne : " + calculerMoyenne(notes));
[Link]("Maximum : " + trouverMax(notes));
}
}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

CM2 — Classes et Objets


1. Concepts fondamentaux de la POO
La Programmation Orientée Objet repose sur quatre piliers : l'Encapsulation, l'Héritage, le
Polymorphisme et l'Abstraction. Dans ce chapitre, nous allons voir les deux premiers concepts
fondamentaux : les classes et les objets.

Analogie essentielle

Une CLASSE est un moule, un plan de construction.

Un OBJET est une instance concrète créée à partir de ce moule.

Exemple : Etudiant est une classe. Koffi Mensah (23 ans, SIL) est un objet de cette
classe.

2. Structure d'une classe


public class Etudiant {
// ── Attributs (état de l'objet) ──
private String nom;
private String prenom;
private int age;
private double moyenne;

// ── Constructeur ──
public Etudiant(String nom, String prenom, int age) {
[Link] = nom;
[Link] = prenom;
[Link] = age;
[Link] = 0.0;
}

// ── Getters ──
public String getNom() { return nom; }
public String getPrenom() { return prenom; }
public int getAge() { return age; }
public double getMoyenne() { return moyenne; }

// ── Setters ──
public void setMoyenne(double moyenne) {
if (moyenne >= 0 && moyenne <= 20)
[Link] = moyenne;
}

// ── Méthode toString ──
@Override
public String toString() {
return "Etudiant[" + nom + " " + prenom + ", age=" + age

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

+ ", moyenne=" + moyenne + "]";


}
}

3. Instanciation et utilisation
public class Main {
public static void main(String[] args) {
// Créer des objets
Etudiant e1 = new Etudiant("Mensah", "Koffi", 21);
Etudiant e2 = new Etudiant("Agbovi", "Ama", 20);

// Modifier les attributs via les setters


[Link](14.5);
[Link](16.0);

// Afficher les objets


[Link](e1);
[Link](e2);
[Link]("Meilleur étudiant : " + [Link]());
}
}

4. Encapsulation
L'encapsulation consiste à protéger les attributs d'une classe en les déclarant privés (private) et en
fournissant des méthodes publiques pour y accéder et les modifier. Cela garantit l'intégrité des
données.

Modificateur Accès

private Accessible uniquement dans la classe elle-même

public Accessible depuis n'importe quelle classe

protected Accessible dans la classe et ses sous-classes

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

TP2 — Modélisation de classes

Objectifs du TP

Créer des classes Java avec attributs, constructeurs et méthodes.

Appliquer le principe d'encapsulation (private + getters/setters).

Instancier des objets et les manipuler.

Exercice 1 — Classe Professeur

Créez une classe Professeur avec les attributs : nom (String), prenom (String), matiere
(String), salaireBase (double).

Ajoutez un constructeur prenant les 4 paramètres.

Ajoutez des getters pour tous les attributs et un setter pour salaireBase (valeur > 0
obligatoire).

Ajoutez une méthode calculerSalaireNet() qui retourne salaireBase * 0.85 (après


déduction).

Ajoutez une méthode toString() affichant toutes les informations.

Dans le main, créez 2 professeurs et affichez leur salaire net.

Corrigé
public class Professeur {
private String nom, prenom, matiere;
private double salaireBase;

public Professeur(String nom, String prenom, String matiere, double


salaireBase) {
[Link] = nom; [Link] = prenom;
[Link] = matiere; [Link] = salaireBase;
}
public String getNom() { return nom; }
public String getPrenom() { return prenom; }
public String getMatiere(){ return matiere; }
public void setSalaireBase(double s) { if (s > 0) salaireBase = s; }
public double calculerSalaireNet() { return salaireBase * 0.85; }
@Override
public String toString() { return prenom+" "+nom+" ("+matiere+") - Net:
"+calculerSalaireNet(); }
public static void main(String[] args) {
Professeur p1 = new Professeur("Komi","Théodore","Java",350000);
Professeur p2 = new Professeur("Adzoa","Séraphine","BDD",400000);

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

[Link](p1);
[Link](p2);
}
}

Exercice 2 — Classe Cours

Créez une classe Cours avec : code (String), intitule (String), credits (int), volumeHoraire
(int).

Constructeur complet + getters/setters.

Méthode estValidant() : retourne true si credits >= 2.

Méthode toString() complète.

Créez 3 cours et affichez ceux qui sont validants.

Corrigé
public class Cours {
private String code, intitule;
private int credits, volumeHoraire;

public Cours(String code, String intitule, int credits, int vh) {


[Link]=code; [Link]=intitule;
[Link]=credits; [Link]=vh;
}
public String getCode() { return code; }
public String getIntitule(){ return intitule; }
public int getCredits() { return credits; }
public boolean estValidant(){ return credits >= 2; }
@Override
public String toString() { return code+" - "+intitule+" ("+credits+"
crédits)"; }
public static void main(String[] args) {
Cours[] cours = { new Cours("INF201","Java",3,30),
new Cours("INF202","BDD",3,25),
new Cours("INF203","Algo",1,15) };
for (Cours c : cours)
if ([Link]()) [Link](c + " => VALIDANT");
}
}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

CM3 — Héritage, Polymorphisme et Collections


1. Héritage
L'héritage permet à une classe (sous-classe) de réutiliser les attributs et méthodes d'une autre
classe (super-classe). On utilise le mot-clé extends.
// Super-classe
public class Personne {
protected String nom;
protected String prenom;
protected int age;

public Personne(String nom, String prenom, int age) {


[Link] = nom; [Link] = prenom; [Link] = age;
}
public String getNomComplet() { return prenom + " " + nom; }
public String toString() { return getNomComplet() + " (" + age + " ans)"; }
}

// Sous-classe Etudiant hérite de Personne


public class Etudiant extends Personne {
private String matricule;
private double moyenne;

public Etudiant(String nom, String prenom, int age, String matricule) {


super(nom, prenom, age); // Appel du constructeur parent
[Link] = matricule;
[Link] = 0.0;
}
public String getMatricule() { return matricule; }
public void setMoyenne(double m) { [Link] = m; }
@Override
public String toString() {
return [Link]() + " | Matricule: " + matricule
+ " | Moyenne: " + moyenne;
}
}

2. Polymorphisme
Le polymorphisme permet d'utiliser une référence de type parent pour désigner un objet de type
enfant. La méthode appelée est déterminée à l'exécution selon le type réel de l'objet.
Personne p1 = new Etudiant("Mensah","Koffi",21,"SIL2023-01");
Personne p2 = new Professeur("Komi","Théodore",45,"Java");

// Appel polymorphe : toString() de chaque sous-classe est appelé


[Link]([Link]());
[Link]([Link]());

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

3. Classes abstraites et interfaces


// Classe abstraite : ne peut pas être instanciée directement
public abstract class Personne {
protected String nom;
// Méthode abstraite : chaque sous-classe doit l'implémenter
public abstract String getRole();
}

// Interface
public interface Evaluable {
double calculerNote();
boolean estAdmis();
}

// Classe concrète implémente l'interface


public class Etudiant extends Personne implements Evaluable {
private double moyenne;
@Override public String getRole() { return "Etudiant"; }
@Override public double calculerNote() { return moyenne; }
@Override public boolean estAdmis() { return moyenne >= 10; }
}

4. Collections : ArrayList et HashMap


import [Link];
import [Link];

// ArrayList : liste dynamique d'objets


ArrayList<Etudiant> promotion = new ArrayList<>();
[Link](new Etudiant("Mensah","Koffi",21,"SIL-001"));
[Link](new Etudiant("Agbovi","Ama",20,"SIL-002"));

// Parcourir la liste
for (Etudiant e : promotion) {
[Link](e);
}

// HashMap : association clé → valeur


HashMap<String, Double> notes = new HashMap<>();
[Link]("SIL-001", 14.5);
[Link]("SIL-002", 16.0);
[Link]([Link]("SIL-001")); // Affiche 14.5

5. Gestion des exceptions


public double diviser(double a, double b) {
if (b == 0) throw new ArithmeticException("Division par zéro !");
return a / b;
}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

try {
double res = diviser(10, 0);
} catch (ArithmeticException e) {
[Link]("Erreur : " + [Link]());
} finally {
[Link]("Bloc finally toujours exécuté.");
}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

TP3 — Héritage et Polymorphisme en pratique

Objectifs du TP

Mettre en place une hiérarchie de classes avec héritage.

Utiliser le polymorphisme avec des ArrayList.

Gérer les exceptions dans un contexte réel.

Exercice 1 — Hiérarchie Personne → Etudiant / Professeur

Créez la classe abstraite Personne (nom, prenom, age) avec une méthode abstraite
getRole().

Créez Etudiant extends Personne avec : matricule, moyenne. Implémente getRole() →


'Etudiant'.

Créez Professeur extends Personne avec : specialite, salaire. Implémente getRole() →


'Professeur'.

Dans le main, créez une ArrayList<Personne> avec 3 étudiants et 2 professeurs.

Parcourez la liste et affichez le rôle et les informations de chaque personne.

Corrigé
// [Link]
public abstract class Personne {
protected String nom, prenom; protected int age;
public Personne(String n, String p, int a){nom=n;prenom=p;age=a;}
public abstract String getRole();
public String toString(){return getRole()+" : "+prenom+" "+nom;}
}
// [Link]
public class Etudiant extends Personne {
private String matricule; private double moyenne;
public Etudiant(String n,String p,int a,String m){super(n,p,a);matricule=m;}
public String getRole(){return "Etudiant";}
public void setMoyenne(double m){moyenne=m;}
public String toString(){return [Link]()+" | "+matricule+" |
"+moyenne+"/20";}
}
// [Link]
public class Professeur extends Personne {
private String specialite; private double salaire;
public Professeur(String n,String p,int a,String s,double sal)
{super(n,p,a);specialite=s;salaire=sal;}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

public String getRole(){return "Professeur";}


public String toString(){return [Link]()+" | "+specialite;}
}
// [Link]
import [Link];
public class Main {
public static void main(String[] args) {
ArrayList<Personne> liste = new ArrayList<>();
[Link](new Etudiant("Mensah","Koffi",21,"SIL-001"));
[Link](new Etudiant("Agbovi","Ama",20,"SIL-002"));
[Link](new Professeur("Komi","Théodore",45,"Java",350000));
for (Personne p : liste) [Link](p);
}
}

Exercice 2 — Gestion d'exceptions personnalisée

Créez une exception NoteInvalideException extends Exception.

Modifiez le setter setMoyenne() de la classe Etudiant pour lever cette exception si la


note est hors de [0, 20].

Dans le main, gérez cette exception avec try/catch et affichez un message clair.

Corrigé
// [Link]
public class NoteInvalideException extends Exception {
public NoteInvalideException(double note) {
super("Note invalide : " + note + " (doit être entre 0 et 20)");
}
}
// Dans [Link] :
public void setMoyenne(double m) throws NoteInvalideException {
if (m < 0 || m > 20) throw new NoteInvalideException(m);
[Link] = m;
}
// Dans [Link] :
try {
[Link](25); // Valeur invalide
} catch (NoteInvalideException e) {
[Link]("Erreur : " + [Link]());
}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

CM4 — Connexion Java ↔ MySQL avec JDBC


1. Qu'est-ce que JDBC ?
JDBC (Java Database Connectivity) est l'API standard de Java pour se connecter à des bases de
données relationnelles. Elle fournit un ensemble d'interfaces permettant d'exécuter des requêtes
SQL depuis du code Java, indépendamment du SGBD utilisé.

Étapes JDBC à retenir

1. Charger le pilote (Driver) : [Link]("[Link]")

2. Établir la connexion : [Link](url, user, password)

3. Créer un Statement ou PreparedStatement

4. Exécuter la requête SQL

5. Traiter le ResultSet (pour les SELECT)

6. Fermer les ressources (ResultSet, Statement, Connection)

2. Ajouter le pilote MySQL dans NetBeans


Téléchargez le fichier [Link] depuis
[Link]
Dans NetBeans : clic droit sur votre projet → Propriétés → Bibliothèques → Ajouter le JAR.

3. Classe de connexion réutilisable


import [Link];
import [Link];
import [Link];

public class ConnexionMySQL {


private static final String URL = "jdbc:mysql://localhost:3306/ecole";
private static final String USER = "root";
private static final String PASS = "votre_mot_de_passe";

public static Connection getConnexion() throws SQLException {


return [Link](URL, USER, PASS);
}
}

4. Opérations CRUD avec JDBC


4.1 INSERT — Ajouter un enregistrement
String sql = "INSERT INTO etudiants (nom, prenom, age) VALUES (?, ?, ?)";
try (Connection conn = [Link]();

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

PreparedStatement ps = [Link](sql)) {
[Link](1, "Mensah");
[Link](2, "Koffi");
[Link](3, 21);
int lignes = [Link]();
[Link](lignes + " ligne(s) insérée(s)");
} catch (SQLException e) {
[Link]("Erreur : " + [Link]());
}

4.2 SELECT — Lire les données


String sql = "SELECT * FROM etudiants";
try (Connection conn = [Link]();
PreparedStatement ps = [Link](sql);
ResultSet rs = [Link]()) {
while ([Link]()) {
int id = [Link]("id");
String nom = [Link]("nom");
String prenom= [Link]("prenom");
int age = [Link]("age");
[Link](id + " - " + prenom + " " + nom + " (" + age + " ans)");
}
} catch (SQLException e) {
[Link]("Erreur : " + [Link]());
}

4.3 UPDATE et DELETE


// UPDATE
String sqlUpdate = "UPDATE etudiants SET age = ? WHERE id = ?";
try (Connection conn = [Link]();
PreparedStatement ps = [Link](sqlUpdate)) {
[Link](1, 22);
[Link](2, 1);
[Link]();
}

// DELETE
String sqlDelete = "DELETE FROM etudiants WHERE id = ?";
try (Connection conn = [Link]();
PreparedStatement ps = [Link](sqlDelete)) {
[Link](1, 1);
[Link]();
}

Sécurité — Pourquoi utiliser PreparedStatement ?

Ne JAMAIS construire une requête SQL par concaténation de chaînes.

Exemple dangereux : "SELECT * FROM users WHERE nom = '" + nom + "'"

Si nom = "' OR '1'='1" → injection SQL, accès à toutes les données !

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

PreparedStatement protège automatiquement contre les injections SQL.

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

TP4 — CRUD Java + MySQL

Objectifs du TP

Créer la base de données école dans MySQL via NetBeans.

Connecter Java à MySQL avec JDBC.

Réaliser les opérations INSERT, SELECT, UPDATE, DELETE.

Préparation — Créer la base de données


Dans l'onglet Services de NetBeans, connectez-vous à MySQL et exécutez ce script SQL :
CREATE DATABASE IF NOT EXISTS ecole;
USE ecole;

CREATE TABLE etudiants (


id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(50) NOT NULL,
prenom VARCHAR(50) NOT NULL,
age INT,
moyenne DOUBLE DEFAULT 0.0
);

Exercice 1 — Insertion et affichage

Créez la classe ConnexionMySQL avec les paramètres de connexion à votre base


ecole.

Créez une méthode static void ajouterEtudiant(String nom, String prenom, int age).

Créez une méthode static void afficherTousLesEtudiants().

Dans le main, ajoutez 3 étudiants puis affichez-les tous.

Corrigé
import [Link].*;
public class GestionEtudiants {
static Connection getConn() throws SQLException {
return [Link](
"jdbc:mysql://localhost:3306/ecole","root","password");
}
public static void ajouterEtudiant(String nom,String prenom,int age){
String sql="INSERT INTO etudiants(nom,prenom,age) VALUES(?,?,?)";
try(Connection c=getConn();PreparedStatement ps=[Link](sql))
{
[Link](1,nom);[Link](2,prenom);[Link](3,age);

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

[Link]();
[Link]("Etudiant ajouté : "+prenom+" "+nom);
}catch(SQLException e){[Link]([Link]());}
}
public static void afficherTousLesEtudiants(){
try(Connection c=getConn();PreparedStatement
ps=[Link]("SELECT * FROM etudiants");
ResultSet rs=[Link]()){
while([Link]())
[Link]([Link]("id")+" | "+[Link]("prenom")
+" "+[Link]("nom"));
}catch(SQLException e){[Link]([Link]());}
}
public static void main(String[] args){
ajouterEtudiant("Mensah","Koffi",21);
ajouterEtudiant("Agbovi","Ama",20);
ajouterEtudiant("Dossou","Edem",22);
afficherTousLesEtudiants();
}
}

Exercice 2 — Mise à jour et suppression

Ajoutez une méthode modifierMoyenne(int id, double moyenne) qui met à jour la
moyenne d'un étudiant.

Ajoutez une méthode supprimerEtudiant(int id) qui supprime un étudiant par son id.

Testez les deux méthodes dans le main et affichez la liste après chaque opération.

Corrigé
public static void modifierMoyenne(int id, double moyenne){
String sql="UPDATE etudiants SET moyenne=? WHERE id=?";
try(Connection c=getConn();PreparedStatement ps=[Link](sql)){
[Link](1,moyenne); [Link](2,id);
int n=[Link]();
[Link](n+" ligne(s) modifiée(s)");
}catch(SQLException e){[Link]([Link]());}
}
public static void supprimerEtudiant(int id){
String sql="DELETE FROM etudiants WHERE id=?";
try(Connection c=getConn();PreparedStatement ps=[Link](sql)){
[Link](1,id);
int n=[Link]();
[Link](n+" étudiant(s) supprimé(s)");
}catch(SQLException e){[Link]([Link]());}
}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

CM5 — Architecture DAO (Data Access Object)


1. Pourquoi le pattern DAO ?
Dans une application bien structurée, on sépare les responsabilités en couches distinctes. Le
pattern DAO isole tout le code d'accès à la base de données dans des classes dédiées, rendant
l'application plus maintenable et testable.

Couche Rôle Classes

Présentation Interaction avec l'utilisateur Main, Menu


(menu, IHM)

Métier (Business) Logique applicative, Service, Manager


traitements

DAO Accès à la base de données EtudiantDAO, CoursDAO


uniquement

Modèle (Bean) Représentation des données Etudiant, Cours

2. Structure du pattern DAO


2.1 La classe modèle (Bean)
// [Link] — simple objet de données
public class Etudiant {
private int id;
private String nom, prenom;
private int age;
private double moyenne;

// Constructeur sans id (pour INSERT)


public Etudiant(String nom, String prenom, int age) {
[Link]=nom; [Link]=prenom; [Link]=age;
}
// Constructeur complet (pour SELECT)
public Etudiant(int id, String nom, String prenom, int age, double moyenne) {
[Link]=id; [Link]=nom; [Link]=prenom;
[Link]=age; [Link]=moyenne;
}
// Getters et setters ...
public int getId() { return id; }
public String getNom() { return nom; }
public String getPrenom() { return prenom; }
public int getAge() { return age; }
public double getMoyenne(){ return moyenne; }
public void setMoyenne(double m){ [Link]=m; }
}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

2.2 L'interface DAO


import [Link];

public interface IEtudiantDAO {


void ajouter(Etudiant e);
Etudiant trouverParId(int id);
List<Etudiant> trouverTous();
void modifier(Etudiant e);
void supprimer(int id);
}

2.3 L'implémentation MySQL


import [Link].*;
import [Link];
import [Link];

public class EtudiantDAOImpl implements IEtudiantDAO {

@Override
public void ajouter(Etudiant e) {
String sql = "INSERT INTO etudiants(nom,prenom,age,moyenne) VALUES(?,?,?,?)";
try (Connection c = [Link]();
PreparedStatement ps = [Link](sql)) {
[Link](1, [Link]());
[Link](2, [Link]());
[Link](3, [Link]());
[Link](4, [Link]());
[Link]();
} catch (SQLException ex) { [Link](); }
}

@Override
public List<Etudiant> trouverTous() {
List<Etudiant> liste = new ArrayList<>();
String sql = "SELECT * FROM etudiants";
try (Connection c = [Link]();
PreparedStatement ps = [Link](sql);
ResultSet rs = [Link]()) {
while ([Link]()) {
[Link](new Etudiant(
[Link]("id"), [Link]("nom"),
[Link]("prenom"), [Link]("age"),
[Link]("moyenne")
));
}
} catch (SQLException ex) { [Link](); }
return liste;
}

@Override
public Etudiant trouverParId(int id) {
String sql = "SELECT * FROM etudiants WHERE id=?";

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

try (Connection c = [Link]();


PreparedStatement ps = [Link](sql)) {
[Link](1, id);
ResultSet rs = [Link]();
if ([Link]()) return new Etudiant(
[Link]("id"), [Link]("nom"),
[Link]("prenom"), [Link]("age"),
[Link]("moyenne"));
} catch (SQLException ex) { [Link](); }
return null;
}

@Override
public void modifier(Etudiant e) {
String sql = "UPDATE etudiants SET nom=?,prenom=?,age=?,moyenne=? WHERE id=?";
try (Connection c = [Link]();
PreparedStatement ps = [Link](sql)) {
[Link](1, [Link]()); [Link](2, [Link]());
[Link](3, [Link]()); [Link](4, [Link]());
[Link](5, [Link]());
[Link]();
} catch (SQLException ex) { [Link](); }
}

@Override
public void supprimer(int id) {
String sql = "DELETE FROM etudiants WHERE id=?";
try (Connection c = [Link]();
PreparedStatement ps = [Link](sql)) {
[Link](1, id);
[Link]();
} catch (SQLException ex) { [Link](); }
}
}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

TP5 — Implémenter le pattern DAO

Objectifs du TP

Structurer un projet Java en couches (Modèle, DAO, Interface).

Implémenter l'interface IEtudiantDAO avec MySQL.

Tester toutes les opérations CRUD via une classe de test.

Structure du projet à créer dans NetBeans


ProjetEcole/
├── modele/
│ └── [Link]
├── dao/
│ ├── [Link]
│ └── [Link]
├── connexion/
│ └── [Link]
└── [Link]

Exercice 1 — Mise en place complète du DAO

Créez le projet ProjetEcole dans NetBeans avec les packages ci-dessus.

Implémentez toutes les classes selon le CM5.

Dans [Link], créez un menu console avec les options :

1. Ajouter un étudiant

2. Afficher tous les étudiants

3. Modifier la moyenne d'un étudiant

4. Supprimer un étudiant

5. Quitter

Corrigé
import [Link];
import [Link];
import [Link];

public class Main {


public static void main(String[] args) {
EtudiantDAOImpl dao = new EtudiantDAOImpl();

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

Scanner sc = new Scanner([Link]);


int choix = 0;
do {
[Link]("\n=== GESTION ETUDIANTS ===");
[Link]("1. Ajouter 2. Afficher 3. Modifier 4.
Supprimer 5. Quitter");
[Link]("Votre choix : ");
choix = [Link](); [Link]();
switch(choix) {
case 1:
[Link]("Nom : "); String nom = [Link]();
[Link]("Prénom : "); String prenom =
[Link]();
[Link]("Age : "); int age = [Link]();
[Link](new Etudiant(nom, prenom, age));
[Link]("Etudiant ajouté !"); break;
case 2:
for (Etudiant e : [Link]())
[Link]([Link]()+" | "+[Link]()+"
"+[Link]()+" | "+[Link]()); break;
case 3:
[Link]("ID étudiant : "); int id = [Link]();
[Link]("Nouvelle moyenne : "); double moy =
[Link]();
Etudiant e = [Link](id);
if (e!=null)
{[Link](moy);[Link](e);[Link]("Mis à jour !");}
else [Link]("Etudiant introuvable."); break;
case 4:
[Link]("ID à supprimer : "); int sid =
[Link]();
[Link](sid); [Link]("Supprimé !"); break;
}
} while(choix != 5);
[Link]("Au revoir !");
}
}

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

Projet Final — Système de Gestion d'une École

Consignes générales

Ce projet est à réaliser individuellement ou en binôme.

Il doit être rendu sous forme de projet NetBeans compressé (.zip).

Une démonstration orale de 10 minutes sera demandée.

Le code doit être commenté et structuré en packages.

1. Base de données MySQL à créer


CREATE DATABASE gestion_ecole;
USE gestion_ecole;

CREATE TABLE personnes (


id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(50), prenom VARCHAR(50), age INT,
type ENUM('etudiant','professeur') NOT NULL
);

CREATE TABLE etudiants (


id INT PRIMARY KEY,
matricule VARCHAR(20) UNIQUE,
moyenne DOUBLE DEFAULT 0,
FOREIGN KEY (id) REFERENCES personnes(id)
);

CREATE TABLE professeurs (


id INT PRIMARY KEY,
specialite VARCHAR(50),
salaire DOUBLE,
FOREIGN KEY (id) REFERENCES personnes(id)
);

CREATE TABLE cours (


id INT AUTO_INCREMENT PRIMARY KEY,
code VARCHAR(10) UNIQUE,
intitule VARCHAR(100),
credits INT
);

CREATE TABLE inscriptions (


etudiant_id INT, cours_id INT,
PRIMARY KEY (etudiant_id, cours_id),
FOREIGN KEY (etudiant_id) REFERENCES etudiants(id),
FOREIGN KEY (cours_id) REFERENCES cours(id)
);

Page Page
Support de Cours Java — POO & MySQL | SIL 2ème Année

2. Architecture Java attendue


GestionEcole/
├── modele/
│ ├── [Link] (classe abstraite)
│ ├── [Link] (extends Personne)
│ ├── [Link] (extends Personne)
│ └── [Link]
├── dao/
│ ├── [Link]
│ ├── [Link]
│ ├── [Link]
│ └── [Link]
├── connexion/
│ └── [Link]
└── [Link] (menu console interactif)

3. Fonctionnalités requises
• Gestion des étudiants : ajouter, afficher, modifier moyenne, supprimer
• Gestion des cours : ajouter, afficher, supprimer
• Inscription d'un étudiant à un cours
• Afficher les cours d'un étudiant donné
• Afficher les étudiants inscrits à un cours donné
• Menu console avec navigation claire

4. Barème d'évaluation

Critère Points

Structure du projet (packages, nommage) 3 pts

Modèle POO (héritage, encapsulation, polymorphisme) 5 pts

Connexion et opérations JDBC 4 pts

Pattern DAO correctement implémenté 4 pts

Menu fonctionnel et gestion des exceptions 2 pts

Qualité du code et commentaires 2 pts

TOTAL 20 pts

Bon courage !
Ce cours vous donne toutes les bases pour développer des applications Java professionnelles.

Page Page

Vous aimerez peut-être aussi