init: finish implementation niveau dans le jeu
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import java.io.IOException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
@@ -11,6 +11,8 @@ public class NiveauxDataConnect {
|
||||
//Création d'une variable de connexion à la base de données
|
||||
private static final String url = "jdbc:sqlite:Niveaux.db";
|
||||
private static boolean tablesCreees = false; // Variable pour vérifier si les tables ont été créées
|
||||
private static NiveauxDataConnect instance; // Instance unique de la classe NiveauDataConnect
|
||||
private static Connection maConnexion; // Objet connexion à partager
|
||||
|
||||
|
||||
|
||||
@@ -23,45 +25,68 @@ public class NiveauxDataConnect {
|
||||
// Il est nécessaire de l'initialiser afin de pouvoir le lire et écrire dessus
|
||||
// Car dans la .jar il est en lecture seule
|
||||
// Il faut donc le copier dans un endroit où il peut être modifié, par exemple dans le dossier du projet
|
||||
// Mon constructeur est en privé car personne ne doit pouvoir faire new NiveauDataConnect
|
||||
// ----------------------------------------------------------------
|
||||
public NiveauxDataConnect() throws ClassNotFoundException, SQLException {
|
||||
private NiveauxDataConnect() throws ClassNotFoundException, SQLException {
|
||||
// Initialisation de la connexion à la base de données
|
||||
Connection conn = getConnection();
|
||||
if (conn != null) {
|
||||
System.out.println("Connexion à la base de données réussie !");
|
||||
maConnexion = getConnection();
|
||||
if (maConnexion != null) {
|
||||
System.out.println("Instance du singleton créée et connexion prête.");
|
||||
} else {
|
||||
System.out.println("Connexion échouée !");
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Point d'accès global pour obtenir l'instance du singleton
|
||||
// On utilise synchronized pour éviter les problèmes si deux threads appellent
|
||||
// la méthode au démarrage en même temps
|
||||
//--------------------------------------------------------------------------
|
||||
public static synchronized NiveauxDataConnect getInstance(){
|
||||
try{
|
||||
if(instance == null){
|
||||
instance = new NiveauxDataConnect();
|
||||
}
|
||||
return instance;
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Méthode de connexion à la base de données Niveaux.db
|
||||
// -------------------------------------------------------------------------
|
||||
public static Connection getConnection(){
|
||||
public static Connection getConnection() throws SQLException{
|
||||
// On vérifie si ma connexion, singleton existe déjà et à déjà une valeur
|
||||
// Ou si elle a été fermé
|
||||
if(maConnexion == null || maConnexion.isClosed()){
|
||||
// On vérifiera si la BDD est déjà créé et possède déjà des données à l'intérieur
|
||||
// On devra ainsi l'extraire depuis le .jar
|
||||
boolean baseExiste = bddInit.init();
|
||||
try{
|
||||
Connection conn = DriverManager.getConnection(url);
|
||||
System.out.println("Connexion à la base de données réussie !");
|
||||
if(!baseExiste){
|
||||
// Vérifier si les tables ont déjà été créées pour éviter de les recréer à chaque connexion
|
||||
if (!tablesCreees) {
|
||||
// Créer la table niveau si elle n'existe pas déjà
|
||||
CreerTableNiveaux(conn);
|
||||
tablesCreees = true; // Marquer les tables comme créées
|
||||
// Insérer les niveaux dans la table niveau
|
||||
insererNiveau(conn);
|
||||
boolean baseExiste = bddInit.init();
|
||||
try{
|
||||
maConnexion = DriverManager.getConnection(url);
|
||||
System.out.println("Connexion à la base de données réussie !");
|
||||
if(!baseExiste){
|
||||
// Vérifier si les tables ont déjà été créées pour éviter de les recréer à chaque connexion
|
||||
if (!tablesCreees) {
|
||||
// Créer la table niveau si elle n'existe pas déjà
|
||||
CreerTableNiveaux(maConnexion);
|
||||
tablesCreees = true; // Marquer les tables comme créées
|
||||
// Insérer les niveaux dans la table niveau
|
||||
insererNiveau(maConnexion);
|
||||
}
|
||||
}
|
||||
|
||||
return maConnexion;
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return conn;
|
||||
}catch(Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
return maConnexion;
|
||||
}
|
||||
|
||||
|
||||
@@ -97,6 +122,7 @@ public class NiveauxDataConnect {
|
||||
// Les niveaux sont connus à l'avance et sont insérés directement
|
||||
// dans la base de données pour éviter de les insérer à chaque fois que
|
||||
// le jeu est lancé
|
||||
// Pour corser le jeu, on utilisera l'id du niveau qui nous servira de difficulté
|
||||
// --------------------------------Niveau 1 --------------------------------
|
||||
// nom = "Facile", vitesse_ligne = 5, nb_segments = 50, image = "images\ciel.jpeg", multiplicateur_score = 1, couleur_cercle = "bleu"
|
||||
// --------------------------------Niveau 2 --------------------------------
|
||||
@@ -137,17 +163,20 @@ public class NiveauxDataConnect {
|
||||
Niveau niveauRecup = null;
|
||||
String sql = "SELECT * FROM niveau WHERE id = ?;";
|
||||
|
||||
try (Statement stmt = conn.createStatement();
|
||||
ResultSet rs = stmt.executeQuery(sql)) {
|
||||
while (rs.next()) {
|
||||
int id1 = rs.getInt("id");
|
||||
String nom = rs.getString("nom");
|
||||
int vitesse_ligne = rs.getInt("vitesse_ligne");
|
||||
int nb_segments = rs.getInt("nb_segments");
|
||||
String image = rs.getString("image");
|
||||
int multiplicateur_score = rs.getInt("multiplicateur_score");
|
||||
String couleur_cercle = rs.getString("couleur_cercle");
|
||||
niveauRecup = new Niveau(id1, nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle);
|
||||
try (PreparedStatement pstmt = conn.prepareStatement(sql)){
|
||||
pstmt.setInt(1, id); // On remplace le 1er ? par l'id
|
||||
|
||||
try(ResultSet rs = pstmt.executeQuery()) {
|
||||
while (rs.next()) {
|
||||
int id1 = rs.getInt("id");
|
||||
String nom = rs.getString("nom");
|
||||
int vitesse_ligne = rs.getInt("vitesse_ligne");
|
||||
int nb_segments = rs.getInt("nb_segments");
|
||||
String image = rs.getString("image");
|
||||
int multiplicateur_score = rs.getInt("multiplicateur_score");
|
||||
String couleur_cercle = rs.getString("couleur_cercle");
|
||||
niveauRecup = new Niveau(id1, nom, vitesse_ligne, nb_segments, image, multiplicateur_score, couleur_cercle);
|
||||
}
|
||||
}
|
||||
|
||||
} catch (SQLException e) {
|
||||
|
||||
Reference in New Issue
Block a user