85 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
|  | 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 d’une 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 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 <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;
 | |||
|  |     }
 | |||
|  | }
 |