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é, sinonnull
     * @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;
    }
}