Ceci est une ancienne révision du document !
Accès aux bases de données
Contexte
Il s'agit du même contexte que dans le TP précédent, il est question cette fois de s'intéresser à la persistance des données : utilisateurs et groupes.
Les données relatives à ces objets seront stockées dans une base de données Mysql.
Contraintes fonctionnelles
L'application Web doit charger à sont démarrage les utilisateurs, puis les groupes, en répartissant les utilisateurs dans leurs groupes respectifs.
A la fermeture de l'application, ou à la demande, les objets (utilisateurs et groupes) sont mis à jour dans la base de données (ajout, modification, suppression).
Contraintes techniques
La base de données sera stockée sur un serveur mysql au format innodb.
Lors de la modification d'un objet (utilisateur ou groupe), celui ci sera tagué par son membre recordStatus, permettant ensuite de déterminer quelle mise à jour devra être effectuée sur l'objet au moment de la sauvegarde dans la base.
Il sera nécessaire d'ajouter un membre recordStatus sur la classe Bo, de type RecordStatus.
Le type RecordStatus sera définit en tant qu'énumération et proposera les valeurs suivantes :
- rsNone : par défaut, aucune modification
- rsUpdate : objet modifié
- rsNew : objet nouveau
- rsDelete : objet supprimé
Missions
- Créer la base de données nommée mUsers, et saisissez des données de test
- Créer les classes d'accès aux bases de données et à Mysql (Db et DbMysql)
- Créer l'énumération RecordStatus et ajouter le membre recordStatus dans la classe Bo, mettre à jour les méthodes devant modifier le recordStatus
- Créer et implémenter les méthodes de la classe DbGateway
- Intégrer la persistance des données dans le projet web, au chargement et à la fermeture de l'application, et à la demande.
Annexes
Classes d'accès aux données
- |h Db.java
package net.db; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public abstract class Db { protected Connection connection; protected String host; protected String user; protected String pass; protected String base; /** * Constructeur * @param host url du serveur de base de données * @param user nom d'utilisateur * @param pass mot de passe * @param base base de données */ public Db(String host, String user, String pass, String base) { super(); this.host = host; this.user = user; this.pass = pass; this.base = base; connection=null; } /** * Etablit la connexion à la base de données * @return vrai si la connexion est établie */ public abstract boolean connect(); /** * Retourne l'objet connection * @return connection */ public Connection getConnection() { return connection; } /** * Ferme la connexion à la base * @throws SQLException */ public void close() throws SQLException{ // TODO à implémenter; } /** * Retourne un statement sur la connexion en cours * @return statement * @throws SQLException */ public Statement getStatement() throws SQLException{ // TODO à implémenter; } /** * Exécute une instruction sql renvoyant un résultat * @param sql Instruction à exécuter * @return resultSet * @throws SQLException */ public ResultSet executeQuery(String sql) throws SQLException{ // TODO à implémenter; } /** * Exécute une instruction sql de mise à jour ne renvoyant pas de résultat * @param sql * @return le dernier autoIncrément généré en cas d'insertion * @throws SQLException */ public int executeUpdate(String sql) throws SQLException{ // TODO à implémenter; } }
- |h DbMysql.java
package net.db; public class DbMysql extends Db { public DbMysql(String host, String user, String pass, String base) { super(host, user, pass, base); } @Override public boolean connect() { return false; } }