Ceci est une ancienne révision du document !
D3-TP04 : Projet gestion de clients(4) - Persistance des données (1)
Note:
- version “JDBC manuel” → à passer en JPA
- fichier configuration mariadb sur le serveur(sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf) à modifier (bind-address=0.0.0.0) pour accès distant
- relancer le serveur
- tester la configuration de l'accès à la bd dans Netbeans (Services → Bases de données) avant de commencer.
Contexte
Nous poursuivons notre application de gestion des clients. Cette application doit permettre :
- De s'authentifier,
- De créer un nouveau client,
- De lister les clients
Travail déjà effectué
Le travail commencé a permis de gérer approximativement l'authentification et l'affichage d'un menu. Les pages permettant de créer un nouveau client ou de les lister sont créées, mais elles ne font rien.
Travail à faire
Désormais, il faudrait pouvoir afficher la liste des clients.
- Pour cela, vous allez créer la base de données bdclient qui contient pour l’instant la table client(id, nom,prenom, mail), id autoincrémenté.
- Créer un bean Client correspondant à la description de la table client de la base de données
- Mettre en place le connecteur JDBC (mariadb-java-client-3.5.6.jar sur le drive et voir SIO1/scannetteTP4)
- Depuis le Drive, récupérer la classe Connexion et la déposer dans l'application dans un nouveau package com.test.bdd créé au niveau du répertoire Source Packages. Cette classe permet d'établir une connexion à la base de données.
Par la suite, pour établir une connexion, il faudra écrire : Connection theConnection = Connexion.getConnect( “192.168.100.100”, “bdclient”, “adminBDClient”, “mdpBDClient”);
La méthode getConnect est une méthode statique, qui peut donc être utilisée sans avoir besoin d'instancier la classe Connexion. Elle a besoin de 4 paramètres : le serveur de base de données, le nom de la base de données, un user de connexion avec son mot de passe associé.
I. Création de la classe ClientMysql
Cette classe sera dédiée aux requêtes SQL concernant la table client. Elle disposera d'un attribut : laConnexion de type Connexion et nous y implanterons les méthodes CRUD :
- Une méthode permettant de créer une occurrence, méthode create
- Une méthode permettant de lire une occurrence, méthode read
- Une méthode permettant de mettre à jour une occurrence, méthode update
- Une méthode permettant de supprimer une occurrence, méthode delete
- Une méthode permettant de retrouver toutes les occurrences, méthode readAll
Créer la nouvelle classe Java ClientMysql dans le package bdd
- Déclarer et initialiser l'attribut laConnexion
- Écrire la méthode readAll. Cette méthode n'a pas besoin de paramètre, et retourne une collection de clients
Les requêtes SQL ont besoin d'un objet de type Statement qui contiendra la requête SQL executeQuery. Cette méthode retourne un objet de type ResultSet (jeu d'enregistrements). Il faut appliquer la méthode next() au ResultSet obtenu pour se positionner sur un enregistrement. Ensuite, les méthode getInt(“nomAttribut”) ou getString(“nomAttribut) permettent de récupérer les valeurs des attributs.
Exemple :
public ArrayList<String> readAll(){ //ClientMysql Cli=new ClientMysql(); ArrayList<String> lesClients=new ArrayList<>(); try { Statement stmt=theConnection.createStatement(); ResultSet resultQ=null; resultQ=stmt.executeQuery("SELECT * FROM client;"); while (resultQ.next()){ String resultat=resultQ.getString("nom")+" "+resultQ.getString("prenom"); lesClients.add(resultat); } resultQ.close(); stmt.close(); } catch(SQLException ex){ System.out.println("SQLException:"+ex.getMessage()); System.out.println("SQLState:"+ex.getSQLState()); System.out.println("code Erreur:"+ex.getErrorCode()); } return lesClients; }
II. Modification de la servlet ListeServlet.java
Modifier la méthode doGet. Avant de solliciter la jsp, elle devra :
- Créer un objet de type ClientMysql
- Appeler la méthode readAll appliquée à cet objet
- transmettre la collection retournée (lesClients) par la méthode readAll à la vue par l'intermédiaire de l'objet request
III. Modification de la jsp listeclientsVue.jsp
La jsp devra afficher les clients présents dans la collection lesClients.