Amélioration
This commit is contained in:
@@ -5,11 +5,18 @@ import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Date;
|
||||
|
||||
import javax.swing.ImageIcon;
|
||||
|
||||
import fr.monkhanny.dorfromantik.gui.Reward;
|
||||
|
||||
public class Database {
|
||||
// Chargement des variables d'environnement
|
||||
@@ -85,6 +92,9 @@ public class Database {
|
||||
int score = rs.getInt("score");
|
||||
String seriesName = rs.getString("name"); // Nom de la série
|
||||
|
||||
// Créer un texte à afficher incluant le score et le nom de la série
|
||||
String displayText = "Score: " + score + " | Série: " + seriesName;
|
||||
|
||||
// Ajouter l'objet PlayerScore à la liste avec un nom générique et le score
|
||||
allScores.add(new PlayerScore(seriesName, score)); // Ajout du nom de la série
|
||||
}
|
||||
@@ -112,6 +122,79 @@ public class Database {
|
||||
}
|
||||
|
||||
|
||||
// New method to get series filtered by date range
|
||||
public List<String> getSeriesByDateRange(Date startDate, Date endDate) {
|
||||
List<String> series = new ArrayList<>();
|
||||
try {
|
||||
String query = "SELECT name FROM Series WHERE creation_date BETWEEN ? AND ? ORDER BY creation_date DESC";
|
||||
PreparedStatement statement = this.database.prepareStatement(query);
|
||||
statement.setDate(1, new java.sql.Date(startDate.getTime()));
|
||||
statement.setDate(2, new java.sql.Date(endDate.getTime()));
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
|
||||
while (resultSet.next()) {
|
||||
series.add(resultSet.getString("name"));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return series;
|
||||
}
|
||||
|
||||
// New method to count series within a date range
|
||||
public int countSeriesByDateRange(Date startDate, Date endDate) {
|
||||
int count = 0;
|
||||
try {
|
||||
String query = "SELECT COUNT(*) as series_count FROM Series WHERE creation_date BETWEEN ? AND ?";
|
||||
PreparedStatement statement = this.database.prepareStatement(query);
|
||||
statement.setDate(1, new java.sql.Date(startDate.getTime()));
|
||||
statement.setDate(2, new java.sql.Date(endDate.getTime()));
|
||||
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
if (resultSet.next()) {
|
||||
count = resultSet.getInt("series_count");
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
// New method to get paginated series within a date range
|
||||
public List<String> getSeriesByDateRangePaginated(Date startDate, Date endDate,
|
||||
int page, int itemsPerPage) {
|
||||
List<String> series = new ArrayList<>();
|
||||
try {
|
||||
String query = "SELECT name FROM Series " +
|
||||
"WHERE creation_date BETWEEN ? AND ? " +
|
||||
"ORDER BY creation_date DESC " +
|
||||
"LIMIT ? OFFSET ?";
|
||||
|
||||
PreparedStatement statement = this.database.prepareStatement(query);
|
||||
statement.setDate(1, new java.sql.Date(startDate.getTime()));
|
||||
statement.setDate(2, new java.sql.Date(endDate.getTime()));
|
||||
statement.setInt(3, itemsPerPage);
|
||||
statement.setInt(4, (page - 1) * itemsPerPage);
|
||||
|
||||
ResultSet resultSet = statement.executeQuery();
|
||||
while (resultSet.next()) {
|
||||
series.add(resultSet.getString("name"));
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return series;
|
||||
}
|
||||
|
||||
// Optional: Method to get series within a specific number of days
|
||||
public List<String> getRecentSeries(int days) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.add(Calendar.DAY_OF_YEAR, -days);
|
||||
Date pastDate = calendar.getTime();
|
||||
|
||||
return getSeriesByDateRange(pastDate, new Date());
|
||||
}
|
||||
|
||||
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é
|
||||
@@ -139,29 +222,55 @@ public class Database {
|
||||
}
|
||||
|
||||
|
||||
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à
|
||||
public void addCustomSeed(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à
|
||||
}
|
||||
}
|
||||
|
||||
// Trouver le plus grand numéro existant dans les noms de série
|
||||
String lastSeriesQuery = "SELECT name FROM Series";
|
||||
int nextId = 1; // Valeur par défaut si aucune série n'existe
|
||||
try (PreparedStatement lastSeriesStmt = this.database.prepareStatement(lastSeriesQuery)) {
|
||||
ResultSet rs = lastSeriesStmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
String seriesName = rs.getString("name");
|
||||
// Extraire le numéro à la fin du nom de la série
|
||||
String[] parts = seriesName.split(" ");
|
||||
try {
|
||||
int number = Integer.parseInt(parts[parts.length - 1]);
|
||||
if (number >= nextId) {
|
||||
nextId = number + 1; // Incrémenter pour la nouvelle série
|
||||
}
|
||||
} catch (NumberFormatException e) {
|
||||
// Ignorer les séries dont le nom ne suit pas le format attendu
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Générer le nom dynamique "Série Custom X"
|
||||
String seriesName = "Série custom " + nextId;
|
||||
|
||||
// Insérer la nouvelle série dans la base de données
|
||||
String insertQuery = "INSERT INTO Series (name, series_id, creation_date) VALUES (?, ?, CURRENT_TIMESTAMP)";
|
||||
try (PreparedStatement stmt = this.database.prepareStatement(insertQuery)) {
|
||||
stmt.setString(1, seriesName);
|
||||
stmt.setLong(2, customSeed); // Utiliser customSeed comme series_id
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
System.err.println("Erreur lors de l'ajout de la seed custom: " + e.getMessage());
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Récupère les meilleurs scores des joueurs (limite de 10 scores)
|
||||
@@ -181,7 +290,10 @@ public class Database {
|
||||
while (rs.next()) {
|
||||
int score = rs.getInt("score");
|
||||
String seriesName = rs.getString("name"); // Nom de la série
|
||||
|
||||
|
||||
// Créer un texte à afficher incluant le score et le nom de la série
|
||||
String displayText = "Score: " + score + " | Série: " + seriesName;
|
||||
|
||||
// Ajouter l'objet PlayerScore à la liste
|
||||
topPlayers.add(new PlayerScore(seriesName, score)); // Assurez-vous que PlayerScore accepte un nom de série
|
||||
}
|
||||
|
Reference in New Issue
Block a user