package linea; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; public class GestionnaireBDD { private Connection conn = null; private static final String DB_FILE = "linea_scores.db"; /** * Le constructeur établit la connexion et crée la table si elle n'existe pas. */ public GestionnaireBDD() { try { // URL de connexion pour SQLite String url = "jdbc:sqlite:" + DB_FILE; // Établir la connexion conn = DriverManager.getConnection(url); System.out.println("Connexion à la base de données SQLite établie."); // S'assurer que la table pour les scores existe creerTableSiNecessaire(); } catch (SQLException e) { System.err.println("Erreur de connexion à la base de données : " + e.getMessage()); } } /** * Crée la table 'parties' si elle n'est pas déjà présente dans la base de données. */ private void creerTableSiNecessaire() { String sql = "CREATE TABLE IF NOT EXISTS parties (\n" + " id INTEGER PRIMARY KEY AUTOINCREMENT,\n" + " duree_secondes INTEGER NOT NULL,\n" + " campagne_id INTEGER NOT NULL,\n" + " difficulte_id INTEGER NOT NULL,\n" + " score INTEGER NOT NULL,\n" + " date_partie TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n" + ");"; // 'try-with-resources' assure que le Statement est bien fermé try (Statement stmt = conn.createStatement()) { stmt.execute(sql); } catch (SQLException e) { System.err.println("Erreur lors de la création de la table : " + e.getMessage()); } } /** * Enregistre les informations d'une partie terminée dans la base de données. * Utilise un PreparedStatement pour la sécurité et la performance. * * @param dureePartie Durée du jeu en secondes. * @param idCampagne ID de la campagne jouée. * @param idDifficulte ID de la difficulté choisie. * @param score Score final du joueur. */ public void enregistrerPartie(int dureePartie, int idCampagne, int idDifficulte, int score) { if (conn == null) { System.err.println("Impossible d'enregistrer la partie : pas de connexion à la BDD."); return; } String sql = "INSERT INTO parties(duree_secondes, campagne_id, difficulte_id, score) VALUES(?,?,?,?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, dureePartie); pstmt.setInt(2, idCampagne); pstmt.setInt(3, idDifficulte); pstmt.setInt(4, score); pstmt.executeUpdate(); System.out.println("Partie enregistrée avec succès ! Score : " + score); } catch (SQLException e) { System.err.println("Erreur lors de l'enregistrement de la partie : " + e.getMessage()); } } /** * Ferme la connexion à la base de données. * Il est important d'appeler cette méthode à la fermeture de l'application. */ public void fermerConnexion() { try { if (conn != null && !conn.isClosed()) { conn.close(); System.out.println("Connexion à la base de données fermée."); } } catch (SQLException ex) { System.err.println("Erreur lors de la fermeture de la connexion BDD : " + ex.getMessage()); } } }