package fr.iutfbleau.papillon; import java.sql.*; /** * La classe UtilisateurBD gère la table utilisateur * de la base de données. *

Elle permet de créer ou de récupérer un utilisateur à partir d’une clé locale, * et de lire un utilisateur complet via sa clé.

* * @version 1.0 * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL */ public class UtilisateurBD { /** Identifiant interne de l’utilisateur. */ private static int id; /** * Récupère ou crée un utilisateur en fonction de sa clé unique. * * @param cle la clé unique associée à l’utilisateur * @return l’identifiant de l’utilisateur correspondant * @throws SQLException si une erreur SQL survient */ public static int getOrCreateIdByKey(String cle) throws SQLException { Connection cnx = BaseDeDonnees.getConnexion(); // Vérifie si un utilisateur existe déjà avec cette clé String sqlSelect = "SELECT id FROM utilisateur WHERE cle = ?"; PreparedStatement pstSelect = cnx.prepareStatement(sqlSelect); pstSelect.setString(1, cle); ResultSet rs = pstSelect.executeQuery(); if (rs.next()) { id = rs.getInt("id"); } else { // Sinon on en crée un nouveau String sqlInsert = "INSERT INTO utilisateur (cle) VALUES (?)"; PreparedStatement pstInsert = cnx.prepareStatement(sqlInsert, Statement.RETURN_GENERATED_KEYS); pstInsert.setString(1, cle); pstInsert.executeUpdate(); ResultSet keys = pstInsert.getGeneratedKeys(); if (keys.next()) { id = keys.getInt(1); } keys.close(); pstInsert.close(); } rs.close(); pstSelect.close(); cnx.close(); return id; } /** * Récupère un utilisateur complet à partir de sa clé. * * @param cle la clé unique de l’utilisateur * @return un objet {@link Utilisateur} si trouvé, sinon null * @throws SQLException si une erreur SQL survient */ public static Utilisateur findByKey(String cle) throws SQLException { Connection cnx = BaseDeDonnees.getConnexion(); String sql = "SELECT id, cle FROM utilisateur WHERE cle = ?"; PreparedStatement pst = cnx.prepareStatement(sql); pst.setString(1, cle); ResultSet rs = pst.executeQuery(); Utilisateur u = null; if (rs.next()) { u = new Utilisateur(rs.getInt("id"), rs.getString("cle")); } rs.close(); pst.close(); cnx.close(); return u; } }