diff --git a/.idea/libraries/slf4j_api_1_7_36.xml b/.idea/libraries/slf4j_api_1_7_36.xml new file mode 100644 index 0000000..8725e01 --- /dev/null +++ b/.idea/libraries/slf4j_api_1_7_36.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/slf4j_simple_1_7_36.xml b/.idea/libraries/slf4j_simple_1_7_36.xml new file mode 100644 index 0000000..3b7711b --- /dev/null +++ b/.idea/libraries/slf4j_simple_1_7_36.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/sqlite_jdbc_3_45_1_0.xml b/.idea/libraries/sqlite_jdbc_3_45_1_0.xml index 807f484..4e8af3e 100644 --- a/.idea/libraries/sqlite_jdbc_3_45_1_0.xml +++ b/.idea/libraries/sqlite_jdbc_3_45_1_0.xml @@ -1,7 +1,7 @@ - + diff --git a/lib/slf4j-api-1.7.36.jar b/lib/slf4j-api-1.7.36.jar new file mode 100644 index 0000000..7d3ce68 Binary files /dev/null and b/lib/slf4j-api-1.7.36.jar differ diff --git a/lib/slf4j-simple-1.7.36.jar b/lib/slf4j-simple-1.7.36.jar new file mode 100644 index 0000000..ef831a8 Binary files /dev/null and b/lib/slf4j-simple-1.7.36.jar differ diff --git a/lib/sqlite-jdbc-3.45.1.0.jar b/lib/sqlite-jdbc-3.45.1.0.jar new file mode 100644 index 0000000..6a484ac Binary files /dev/null and b/lib/sqlite-jdbc-3.45.1.0.jar differ diff --git a/linea_scores.db b/linea_scores.db new file mode 100644 index 0000000..a8a591c Binary files /dev/null and b/linea_scores.db differ diff --git a/projet-dev.iml b/projet-dev.iml index 80415a1..1631ba0 100644 --- a/projet-dev.iml +++ b/projet-dev.iml @@ -7,6 +7,8 @@ - + + + \ No newline at end of file diff --git a/src/GestionnaireScore.java b/src/GestionnaireScore.java index 5b937b7..7abd497 100644 --- a/src/GestionnaireScore.java +++ b/src/GestionnaireScore.java @@ -3,30 +3,65 @@ package linea; import java.sql.*; public class GestionnaireScore { - private String url = "jdbc:sqlite:linea_scores.db"; + + private static final String URL = "jdbc:sqlite:linea_scores.db"; public GestionnaireScore() { - // Au démarrage, on crée la table si elle n'existe pas - try (Connection conn = DriverManager.getConnection(url)) { + // 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," + - "points INTEGER);"; - Statement stmt = conn.createStatement(); - stmt.execute(sql); + "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); + + try (Connection conn = DriverManager.getConnection(URL); PreparedStatement pstmt = conn.prepareStatement(sql)) { - pstmt.setString(1, nom); + + pstmt.setString(1, nom.trim()); pstmt.setInt(2, points); - pstmt.executeUpdate(); + 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(); } } @@ -35,17 +70,34 @@ public class GestionnaireScore { 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); + try (Connection conn = DriverManager.getConnection(URL); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { + boolean auMoinsUn = false; + while (rs.next()) { - sb.append(rs.getString("nom")).append(" : ") - .append(rs.getInt("points")).append("\n"); + 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) { - return "Erreur lors de la lecture des scores."; + 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(); } } \ No newline at end of file