Académique Documents
Professionnel Documents
Culture Documents
3
Les Controller et la JDBC......................................................... 30
JDBC ................................................................................... 30
Controller........................................................................... 33
Création d’un contrôleur .............................................. 34
Codes Commentés ......................................................... 35
Les IHMs ................................................................................. 40
Création d’une view .......................................................... 40
Paramétrage du formulaire .......................................... 47
Chargement des comboBox .......................................... 47
Les En – têtes pour La Grille JTable ............................. 49
Présentation du formulaire parametré ....................... 50
Création des Evénements ................................................. 53
actionPerformed Sur le Bouton ................................... 53
Conclusion .............................................................................. 58
Aller Plus loin .......................................................................... 59
4
Introduction
Java est un langage de programmation Orienté Objets. Son
exécution se fait par la manipulation de ces objets par le
biais de l’état des variables des classes et aussi par le
comportement prévue dans l’implémentation de chaque
méthode de classe.
1
Jean – Michel Doudoux, Développons en Java v 2.30,
https://www.jmdoudoux.fr/java/dej/indexavecframes.htm, p11
5
Outils de travail
6
Premier Projet En Java
Démarrer NetBeans :
7
Création du Projet
8
Vous avez là une boite de dialogue qui vous
présente deux volets dont : catégories et Projets.
Il s’agit de la catégorie du projet que vous voulez
créer et des propositions que vous fait NetBeans
dans cette dernière.
9
Voici les rubriques qui vous concernent :
10
Vous remarquerez qu’il y a une case { cocher qui
vous dit : « Create Main Class ». il faut la décocher
pour permettre que l’on sache se créer la nôtre
dès que nous sommes dans le projet.
11
Espace de Persistance
12
programmes d’applications écrits par les
utilisateurs ou par des programmes utilitaires
fournis avec le SGBD (logiciels d’interrogation
interactifs, éditeurs de rapports, etc.)2.
Le MCD
2 ème
Georges Gardarin, Bases de Données, Ed EYROLLES, 5 Tirage
2003, p49
13
Les Scripts SQL
14
Choix du Design Pattern et
Paramètrage du Projet
Designs Patterns
15
objectif, alors qu’un patron, c’est la description
d’une solution { un plus haut niveau. Le code
utilisé pour implémenter un même patron peut
être complètement différent s’il est appliqué {
deux programmes distincts.
16
- L’Exemple de code écrit dans un des
langages de programmation les plus populaires
facilite la compréhension générale de l’idée
derrière le patron.
17
Ainsi pour l’accès aux données nous devrions
utiliser la classe d’accès aux données de Java, le
JDBC.
Paramétrage du projet
18
constructeur devra avoir des déclarations des
variables, des getters et des setters.
19
des filles de la classe « Swing » qui fournit aux
dérivées les outils nécessaire au graphisme et à
l’événementiel sur le Desktop.
En Pratique
20
La rubrique qui vous concerne ici est « Package
Name », et vous devez simplement écrire le nom
de votre package et cliquer sur le bouton
« Finish ». Puis, faire cela pour la suite des autres
packages.
21
Création des Premiers
Modèles
Composition
Une variable
22
un nom de variable doit commencer par
une lettre (majuscule ou minuscule) ou un "_"
(pas par un chiffre)
un nom de variables peut comporter des
lettres, des chiffres et le caractère _ (les espaces
ne sont pas autorisés!)
Les noms de variables ne peuvent pas être
les noms suivants (qui sont des noms réservés) :
- abstract
- boolean break byte byvalue
- case cast catch char class const continue
- default do double
- else extends
- false final finally float for future
- generic goto
- if implements import inner instanceof int
interface
- long
- native new null
- operator outer
- package private protected public
- return rest return
- short static sctrictfp super switch
synchronized
- this throw throws transient true try
- var void volatile
- while widefp
23
et un nom en minuscules), il faut donc veiller à
utiliser des noms comportant la même casse!
Constructeur
24
votre code plus sécurisé. Getter et Setter
permettent au programmeur de définir et
d'obtenir facilement la valeur d'un type de
données particulier.
En pratique
Création du modèle
25
Dès que vous cliquez dessus, cela vous amène sur
la boite de dialogue suivante :
26
Vous n’avez qu’{ signaler le nom de votre modèle
dans la zone « Class Name » et cliquez sur le
bouton « Finish ». Vous Obtiendrez ceci dans votre
projet :
Code du modèle
package modele;
/**
*
27
* @author AS FLORRY
*/
public class ModeleSection {
/**
* création des variables de la classe
*/
String idSection,libeSection;
/**
* Les Constructeurs
*/
public ModeleSection(){
}
public ModeleSection(String idSection, String
libeSection) {
this.idSection = idSection;
this.libeSection = libeSection;
}
/**
* Les Getters et Les Setters
*/
public String getIdSection() {
return idSection;
}
28
}
Vous devez faire la même activité avec toutes les
autres classes correspondantes aux tables de la
base de données pour permettre que vous ayez
toute la structure de votre BDD.
29
Les Controller et la JDBC
JDBC
30
création de cette classe, suivez celle présentée aux
modèles, mais cette fois faites – le sur le package
« controllerEtDao ». Avant d’écrire du code dans
cette classe, vous devez télécharger la
bibliothèque Java compatible avec votre espace de
persistance pour vous permettre d’écrire les
instructions correspondantes à la connexion de
celle – ci.
import com.mysql.cj.jdbc.ConnectionImpl;
import java.sql.*;
/**
*
* @author AS FLORRY
*/
public class projetCours {
//Variable de Connection
public static com.mysql.cj.jdbc.ConnectionImpl cn;
//Variable de la Requête Préparée
public static PreparedStatement Pst;
//Variable de Réception du Résultat
public static ResultSet rs;
/**
* La Méthode de Connexion
*/
public static void connexionEasy(){
try {
//L'Appel de la Classe et de Ses Pilotes avant la connexion
31
Class.forName("com.mysql.cj.jdbc.Driver");
//Connexion Grâce à la chaaine de Connexion
//Dedans nous avons aussi le nom de la BDD
//Le nom d'Utilisateur et le PWD
cn = (ConnectionImpl)
DriverManager.getConnection("jdbc:mysql://localhos
t:3306/passerpromo","root","");
//Desactivation de l'enregistrement
cn.setAutoCommit(false);
} catch (ClassNotFoundException |
SQLException e) {
System.err.println("Erreur :
"+e.getMessage());
}
}
/**
* La Méthode de déconnexion
*/
public static void deconnexionEasy(){
try {
//Test si la connexion est Ouverte
if (!cn.isClosed()) {
//L'enregistrement des données en Cours
cn.setAutoCommit(true);
//Fermeture de la Requête
Pst.close();
//Fermeture du Résultat
rs.close();
//Fermeture de la Connexion Preprement dite
cn.close();
}
} catch (SQLException e) {
System.err.println("Erreur :
"+e.getMessage());
}
}
}
32
Controller
33
Création d’un contrôleur
34
Codes Commentés
package controllerEtDao;
/**
* Importation des Bibliothèques
*/
import java.sql.SQLException;
import java.util.ArrayList;
import modele.Etudiants;
/**
*
* @author AS FLORRY
*/
public class EtudiantController {
/**
* Méthode Pour l'Enregistrement
* De l'Etudiant dans la Table
* @param et
*/
35
public void saveEtudiant(Etudiants et){
try {
projetCours.connexionEasy();
projetCours.Pst =
projetCours.cn.prepareStatement("INSERT INTO
Etudiants "
+
"(idEtud,nomEtud,postnomEtud,prenomEtud,sexEtud,ad
resseEtud,dateNaiss) "
+ "VALUES (?,?,?,?,?,?,?)");
projetCours.Pst.setString(1, et.getIdEtud());
projetCours.Pst.setString(2, et.getNomEtud());
projetCours.Pst.setString(3, et.getPostnomEtud());
projetCours.Pst.setString(4, et.getPrenomEtud());
projetCours.Pst.setString(5, et.getSexEtud());
projetCours.Pst.setString(6, et.getAdresseEtud());
projetCours.Pst.setDate(7, et.getDateNais());
projetCours.Pst.execute();
projetCours.deconnexionEasy();
System.out.println("Enregistrement effectué");
} catch (SQLException e) {
System.err.println("Erreur : "+e.getMessage());
}
}
/**
* Méthode pour la Modification
* D'un Etudiant dans la Table
* @param et
*/
public void upDateEtudiant(Etudiants et){
try {
projetCours.connexionEasy();
projetCours.Pst =
projetCours.cn.prepareStatement("UPDATE Etudiants
"
+ "SET nomEtud = ?,postnomEtud
= ?,prenomEtud = ?,sexEtud = ?,adresseEtud =
?,dateNaiss = ? "
36
+ " WHERE idEtud = ?");
projetCours.Pst.setString(7, et.getIdEtud());
projetCours.Pst.setString(1, et.getNomEtud());
projetCours.Pst.setString(2, et.getPostnomEtud());
projetCours.Pst.setString(3, et.getPrenomEtud());
projetCours.Pst.setString(4, et.getSexEtud());
projetCours.Pst.setString(5, et.getAdresseEtud());
projetCours.Pst.setDate(6, et.getDateNais());
projetCours.Pst.execute();
projetCours.deconnexionEasy();
System.out.println("Modification effectuée");
} catch (SQLException e) {
System.err.println("Erreur : "+e.getMessage());
}
}
/**
* Recherche d'Un Etudiant
* Dans la Table
* @param id
* @return
*/
public Etudiants findEtudiant(String id){
Etudiants et = new Etudiants();
try {
projetCours.connexionEasy();
projetCours.Pst =
projetCours.cn.prepareStatement("SELECT
idEtud,nomEtud, "
+ "postNomEtud, prenomEtud,
sexEtud, adresseEtud, dateNaiss FROM "
+ " Etudiants WHERE idEtud =
?");
projetCours.Pst.setString(1, id);
projetCours.rs = projetCours.Pst.executeQuery();
if (projetCours.rs.next()) {
et.setSexEtud(projetCours.rs.getString(1));
37
et.setNomEtud(projetCours.rs.getString(2));
et.setPostnomEtud(projetCours.rs.getString(3));
et.setPrenomEtud(projetCours.rs.getString(4));
et.setSexEtud(projetCours.rs.getString(5));
et.setAdresseEtud(projetCours.rs.getString(6));
et.setDateNais(projetCours.rs.getDate(7));
}
projetCours.deconnexionEasy();
} catch (SQLException e) {
System.err.println("Erreur : "+e.getMessage());
}
return et;
}
/**
* La Liste des Etudiants
* @return
*/
public ArrayList<Etudiants> findAll(){
ArrayList<Etudiants> etA = new
ArrayList<>();
try {
projetCours.connexionEasy();
projetCours.Pst =
projetCours.cn.prepareStatement("SELECT
idEtud,nomEtud, "
+ "postNomEtud, prenomEtud,
sexEtud, adresseEtud, dateNaiss FROM "
+ " Etudiants");
projetCours.rs = projetCours.Pst.executeQuery();
while (projetCours.rs.next()) {
Etudiants et = new Etudiants();
38
et =
findEtudiant(projetCours.rs.getString(1));
etA.add(et);
}
projetCours.deconnexionEasy();
} catch (SQLException e) {
System.err.println("Erreur :
"+e.getMessage());
}
return etA;
}
}
39
Les IHMs
Les interfaces Homme – Machine comme leur nom
l’indiquent, sont les canaux par lesquels un
utilisateur discute avec l’espace de persistance
dans une application dynamique.
40
41
Dès que vous cliquez sur « Finish », vous obtenez
l’écran suivant :
42
Par la technique de « drag and drop » ou « glisser
– déposer », nous allons peupler notre formulaire
des outils nécessaire pour le bonheur des
utilisateurs. Et nous obtenons ce qui suit :
43
Comme vous le remarquez, toutes les zones
contiennent encore du texte. Mais nous devons
effacer ce texte avec du code java pour enfin
attendre les données venant des utilisateurs, et
préparer les zones qui auront les données pré –
chargées. Mais avant tout, nous devons d’abord
nommer ces zones pour savoir les appelées dans
la programmation. La procédure est la suivante :
44
Et vous obtenez l’écran suivant pour renseigner le
nom :
45
ici. C’est pour cela que NetBeans nous en
déclarent automatiquement, c’est ainsi que nous
avons le code suivant après toutes les
nomenclatures :
private javax.swing.JComboBox<String> cbAnnee;
private javax.swing.JComboBox<String> cbJr;
private javax.swing.JComboBox<String> cbMoi;
private javax.swing.JComboBox<String> cbSexe;
private javax.swing.JButton cmdAjouter;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable tblEtudiant;
private javax.swing.JTextArea txtAdresse;
private javax.swing.JTextField txtMatricule;
private javax.swing.JTextField txtNom;
private javax.swing.JTextField txtPostNom;
private javax.swing.JTextField txtPrenom;
private javax.swing.JTextField txtRech;
46
Paramétrage du formulaire
Voici le code :
/**
* Chargement ComboBox Sexe
47
*/
void chargerSexe(){
cbSexe.removeAllItems();
cbSexe.addItem("M");
cbSexe.addItem("F");
}
/**
* Chargement ComboBox Jour
*/
void chargerJR(){
cbJr.removeAllItems();
cbJr.addItem("JJ");
for (int i = 1; i <=31; i++) {
String s = String.valueOf(i);
cbJr.addItem(s);
}
}
/**
* Chargement comboBox Mois
*/
void chargerM(){
cbMoi.removeAllItems();
cbMoi.addItem("MM");
for (int i = 1; i <=12; i++) {
String s = String.valueOf(i);
cbMoi.addItem(s);
}
}
/**
* Chargement ComboBox Année
*/
void chargerA(){
cbAnnee.removeAllItems();
cbAnnee.addItem("AAAA");
for (int i = 1950; i <=2200; i++) {
String s = String.valueOf(i);
cbAnnee.addItem(s);
}
}
48
Les En – têtes pour La Grille JTable
tblEtudiant.getColumn("Matricules").setMaxWidth(10
0);
tblEtudiant.getColumn("Sexe").setMaxWidth(40);
49
tblEtudiant.getColumn("Date
Naissance").setMaxWidth(100);
tblEtudiant.getColumn("Adresses").setMaxWidth(0);
} catch (Exception e) {
System.err.println("Erreur :
"+e.getMessage());
}
}
Présentation du formulaire parametré
50
devons aussi définir un contrôleur qui fait le
formatage de la date pour obtenir la date SQL car
c’est de celle-là que nous avons besoins alors que
nos comboBox ne nous produisent que du String.
Voici le code correspondant :
package controllerEtDao;
/**
*
* @author AS FLORRY
*/
import java.sql.Date;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateSql {
/**
* Methode Typée Date SQL
* @param jour
* @param mois
* @param annee
* @return
*/
public static Date DateS(String jour,String mois,
String annee){
//Variable à Retourner
Date dts = null;
try {
//Convertir un String en Date Locale
LocalDate ldate =
LocalDate.of(Integer.parseInt(annee),
Integer.parseInt(mois), Integer.parseInt(jour));
//Definir le Format de la Date
DateTimeFormatter dtf =
DateTimeFormatter.ofPattern("yyyy/MM/dd");
//Recupérer la Date dans un String
String dfmt = ldate.format(dtf);
//Définir la Date au format SQL
dts = java.sql.Date.valueOf(dfmt);
51
} catch (Exception e) {
System.err.println("Erreur :
"+e.getMessage());
}
return dts;
}
}
et.setIdEtud(txtMatricule.getText().toUpperCase().trim()
);
et.setNomEtud(txtNom.getText().toUpperCase().trim());
52
et.setPostnomEtud(txtPostNom.getText().toUpperCase().tri
m());
et.setPrenomEtud(txtPrenom.getText().toUpperCase().trim(
));
et.setSexEtud(cbSexe.getSelectedItem().toString().trim()
);
//Conversion de la Date Par la Classe
DateSQL
java.sql.Date dts =
DateSql.DateS(cbJr.getSelectedItem().toString(),
cbMoi.getSelectedItem().toString(),
cbAnnee.getSelectedItem().toString());
et.setAdresseEtud(txtAdresse.getText().toUpperCase().tri
m());
et.setDateNais(dts);
}
}
Voici le code :
53
et =
etc.findEtudiant(txtMatricule.getText().toUpperCase().tr
im());
String m = et.getIdEtud();
if (m.equalsIgnoreCase("")) {
iciVersBDD();
etc.saveEtudiant(et);
JOptionPane.showMessageDialog(this,
"Enregistrement effectué", "Passer de Promotion",
JOptionPane.INFORMATION_MESSAGE);
nettoie();
}
else
{
int msg =
JOptionPane.showConfirmDialog(this, "Cet'Enregistrement
existe, voulez - vous modifier ?", "Passer de
Promotion", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE);
if (msg==JOptionPane.YES_OPTION) {
iciVersBDD();
etc.upDateEtudiant(et);
JOptionPane.showMessageDialog(this,
"Modification effectuée", "Passer de Promotion",
JOptionPane.INFORMATION_MESSAGE);
nettoie();
}
}
Là vous pouvez essayer pour voir si votre code
fonctionne.
54
Dès que les données sont complètes, vous pouvez
cliquer sur le Bouton Ajouter.
55
56
Ainsi vous voyez que, non seulement
l’enregistrement est effectué, notre grille aussi est
remplie.
57
Conclusion
La programmation en java est merveilleuse et
permet à chaque étudiant de prendre le temps de
pratiquer sur les principes de l’Orienté Objets tout
en effectuant des opérations sur la résolution des
problèmes du monde réel.
58
Aller Plus loin
1. https://jmdoudoux.developpez.com/cours
/developpons/java/chap-swing.php
2. https://www-lipn.univ-
paris13.fr/~cathy/docs/M1-
ProgJava/JavaSwing1.pdf
3. https://www.jmdoudoux.fr/java/dej/chap-
jdbc.htm
4. http://salihayacoub.com/420Keh/Semaine
%2011/2015Jdbc.pdf
5. https://goulet.ca/media/other/364160CH
18_JDBC.pdf
59