Files
SAE-PROJET-PAPILLON/src/fr/iutfbleau/papillon/UtilisateurBD.java

85 lines
2.7 KiB
Java
Raw Normal View History

2025-10-26 22:42:53 +01:00
package fr.iutfbleau.papillon;
import java.sql.*;
/**
* La classe <code>UtilisateurBD</code> gère la table <b>utilisateur</b>
* de la base de données.
* <p>Elle permet de créer ou de récupérer un utilisateur à partir dune clé locale,
* et de lire un utilisateur complet via sa clé.</p>
*
* @version 1.0
* @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL
*/
public class UtilisateurBD {
/** Identifiant interne de lutilisateur. */
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 à lutilisateur
* @return lidentifiant de lutilisateur 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 lutilisateur
* @return un objet {@link Utilisateur} si trouvé, sinon <code>null</code>
* @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;
}
}