2024-11-13 23:09:06 +01:00
|
|
|
package fr.monkhanny.dorfromantik.utils;
|
|
|
|
|
2024-11-23 16:03:08 +01:00
|
|
|
|
2024-11-13 23:09:06 +01:00
|
|
|
import java.sql.Connection;
|
|
|
|
import java.sql.DriverManager;
|
|
|
|
import java.sql.SQLException;
|
2024-11-17 00:27:49 +01:00
|
|
|
import java.sql.Statement;
|
|
|
|
import java.sql.ResultSet;
|
|
|
|
import java.sql.PreparedStatement;
|
2024-11-23 16:03:08 +01:00
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
2024-11-13 23:09:06 +01:00
|
|
|
|
|
|
|
public class Database {
|
|
|
|
// Chargement des variables d'environnement
|
2024-11-17 00:27:49 +01:00
|
|
|
private static final String URL = "jdbc:mariadb://dwarves.iut-fbleau.fr/stiti";
|
|
|
|
private static final String LOGIN = "stiti";
|
|
|
|
private static final String PASSWORD = "stiti1234";
|
2024-11-13 23:09:06 +01:00
|
|
|
|
|
|
|
// 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;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-11-17 00:27:49 +01:00
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
}
|
|
|
|
|
2024-11-24 00:46:22 +01:00
|
|
|
public void addScore(String username, long seriesId, int score) throws SQLException {
|
|
|
|
String insertQuery = "INSERT INTO Scores (username, series_id, score) VALUES (?, ?, ?)";
|
|
|
|
try (PreparedStatement stmt = this.database.prepareStatement(insertQuery)) {
|
|
|
|
stmt.setString(1, username);
|
|
|
|
stmt.setLong(2, seriesId);
|
|
|
|
stmt.setInt(3, score);
|
|
|
|
stmt.executeUpdate();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
System.err.println("Erreur lors de l'ajout du score: " + e.getMessage());
|
|
|
|
throw e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-11-17 00:27:49 +01:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2024-11-23 16:03:08 +01:00
|
|
|
/**
|
|
|
|
* Récupère les meilleurs scores des joueurs (limite de 10 scores)
|
|
|
|
* @return une liste de résultats sous forme de tableau d'objets contenant le nom du joueur et son score
|
|
|
|
*/
|
|
|
|
public List<PlayerScore> getTopPlayers() throws SQLException {
|
|
|
|
List<PlayerScore> topPlayers = new ArrayList<>();
|
|
|
|
|
|
|
|
String query = "SELECT username, score FROM Scores ORDER BY score DESC LIMIT 10";
|
|
|
|
try (Statement stmt = this.database.createStatement();
|
|
|
|
ResultSet rs = stmt.executeQuery(query)) {
|
|
|
|
|
|
|
|
while (rs.next()) {
|
|
|
|
String username = rs.getString("username");
|
|
|
|
if (username == null || username.trim().isEmpty()) {
|
|
|
|
username = "Joueur Anonyme"; // Remplacer par "Joueur Anonyme" si le pseudo est vide ou nul
|
|
|
|
}
|
|
|
|
int score = rs.getInt("score");
|
|
|
|
topPlayers.add(new PlayerScore(username, score));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return topPlayers;
|
|
|
|
}
|
2024-11-17 00:27:49 +01:00
|
|
|
|
2024-11-13 23:09:06 +01:00
|
|
|
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());
|
|
|
|
}
|
|
|
|
}
|
2024-11-17 00:27:49 +01:00
|
|
|
}
|