package linea; import java.sql.*; public class GestionnaireScore { private static final String URL = "jdbc:sqlite:linea_scores.db"; public GestionnaireScore() { // 1) Charger explicitement le driver SQLite JDBC try { Class.forName("org.sqlite.JDBC"); System.out.println("[BDD] Driver SQLite JDBC chargé correctement (org.sqlite.JDBC)."); } catch (ClassNotFoundException e) { System.err.println("[BDD] ERREUR : impossible de charger le driver SQLite JDBC (org.sqlite.JDBC)."); System.err.println("Vérifie que le fichier sqlite-jdbc-xxx.jar est bien présent dans le classpath."); e.printStackTrace(); } // 2) Créer / vérifier la table au démarrage try (Connection conn = DriverManager.getConnection(URL)) { if (conn == null) { System.err.println("[BDD] ERREUR : connexion JDBC nulle lors de l'initialisation."); return; } String sql = "CREATE TABLE IF NOT EXISTS scores (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "nom TEXT NOT NULL," + "points INTEGER NOT NULL" + ");"; try (Statement stmt = conn.createStatement()) { stmt.execute(sql); } System.out.println("[BDD] Table 'scores' vérifiée/créée avec succès."); } catch (SQLException e) { System.err.println("[BDD] ERREUR SQL lors de la création ou vérification de la table 'scores'."); System.err.println("Message SQL : " + e.getMessage()); e.printStackTrace(); } } public void sauvegarderScore(String nom, int points) { if (nom == null || nom.trim().isEmpty()) { System.err.println("[BDD] Tentative d'enregistrer un score avec un nom vide. Opération annulée."); return; } String sql = "INSERT INTO scores(nom, points) VALUES(?, ?)"; try (Connection conn = DriverManager.getConnection(URL); PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, nom.trim()); pstmt.setInt(2, points); int lignes = pstmt.executeUpdate(); System.out.println("[BDD] Score enregistré pour '" + nom + "' (" + points + " points). Lignes affectées : " + lignes); } catch (SQLException e) { System.err.println("[BDD] ERREUR SQL lors de l'enregistrement du score."); System.err.println("Message SQL : " + e.getMessage()); e.printStackTrace(); } } public String getTopScores() { StringBuilder sb = new StringBuilder("--- TOP 10 SCORES ---\n"); String sql = "SELECT nom, points FROM scores ORDER BY points DESC LIMIT 10"; try (Connection conn = DriverManager.getConnection(URL); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { boolean auMoinsUn = false; while (rs.next()) { auMoinsUn = true; sb.append(rs.getString("nom")) .append(" : ") .append(rs.getInt("points")) .append("\n"); } if (!auMoinsUn) { sb.append("(Aucun score enregistré pour le moment)\n"); } } catch (SQLException e) { System.err.println("[BDD] ERREUR SQL lors de la lecture des scores."); System.err.println("Message SQL : " + e.getMessage()); e.printStackTrace(); return "Erreur lors de la lecture des scores.\n" + "Détail : " + e.getMessage() + "\n" + "Consulte la console pour la pile complète (stack trace)."; } return sb.toString(); } }