package fr.monkhanny.dorfromantik.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.sql.ResultSet; import java.sql.PreparedStatement; public class Database { // Chargement des variables d'environnement private static final String URL = "jdbc:mariadb://dwarves.iut-fbleau.fr/stiti"; private static final String LOGIN = "stiti"; private static final String PASSWORD = "stiti1234"; // Variable de passerelle entre le programme et la base de données private Connection database; /** * Ouvre la connexion avec la base de données */ public Database() throws SQLException { try { // Chargement du driver MariaDB Class.forName("org.mariadb.jdbc.Driver"); try { // Connexion à la base de données this.database = DriverManager.getConnection(URL, LOGIN, PASSWORD); }catch (SQLException e) { // Gestion de l'erreur de connexion throw new SQLException("Échec de la connexion à la base de données: " + e.getMessage(), e); } } catch (ClassNotFoundException e) { // Si le driver n'est pas trouvé throw new SQLException("Driver MariaDB introuvable dans le classpath", e); } } public Connection getDatabase() { return this.database; } /** * Récupère le seed correspondant au mode de jeu (series_id) * @param seriesId L'ID de la série (mode de jeu) * @return Le seed associé à ce mode de jeu * @throws SQLException Si une erreur se produit lors de la récupération du seed */ public long getSeedBySeriesId(long seriesId) throws SQLException { String query = "SELECT series_id FROM Series WHERE series_id = " + seriesId; long seed = -1; // Valeur par défaut si le seed n'est pas trouvé try (Statement stmt = this.database.createStatement(); ResultSet rs = stmt.executeQuery(query)) { if (rs.next()) { seed = rs.getLong("series_id"); } } return seed; } public long getSeedByName(String name) throws SQLException { String query = "SELECT series_id FROM Series WHERE name = " + "\'" + name + "\'" +";"; long seed = -1; // Valeur par défaut si le seed n'est pas trouvé try (Statement stmt = this.database.createStatement(); ResultSet rs = stmt.executeQuery(query)) { if (rs.next()) { seed = rs.getLong("series_id"); } } return seed; } public void addCustomSeed(String name, long customSeed) throws SQLException { // Vérifier si la seed existe déjà String checkQuery = "SELECT COUNT(*) FROM Series WHERE series_id = ?"; try (PreparedStatement checkStmt = this.database.prepareStatement(checkQuery)) { checkStmt.setLong(1, customSeed); ResultSet rs = checkStmt.executeQuery(); if (rs.next() && rs.getInt(1) > 0) { // la seed existe déjà return; // Ne pas insérer si la seed existe déjà } } // Si la seed n'existe pas, procéder à l'insertion String insertQuery = "INSERT INTO Series (name, series_id, creation_date) VALUES (?, ?, CURRENT_TIMESTAMP)"; try (PreparedStatement stmt = this.database.prepareStatement(insertQuery)) { stmt.setString(1, name); stmt.setLong(2, customSeed); stmt.executeUpdate(); } catch (SQLException e) { System.err.println("Erreur lors de l'ajout de la seed custom: " + e.getMessage()); throw e; } } public void close() { try { if (this.database != null && !this.database.isClosed()) { this.database.close(); } } catch (SQLException e) { System.err.println("Erreur lors de la fermeture de la base de données : " + e.getMessage()); } } }