diff --git a/linea/linea/Jeu.java b/linea/linea/Jeu.java index e704fdc..61fa854 100644 --- a/linea/linea/Jeu.java +++ b/linea/linea/Jeu.java @@ -168,6 +168,17 @@ public class Jeu implements KeyListener, ActionListener{ ecran.setLayout(null); ecran.add(boutonScores); + //propriétés dont on aura besoin pour utiliser NiveauxDataConnect + //--------------------------------------------------------------------------------- + // C'est ici qu'on appelle NiveauxDataConnect pour initialiser la connexion à la base de données des niveaux + //-------------------------------------------------------------------------------- + NiveauxDataConnect niveau = null; + try { + niveau = new NiveauxDataConnect(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + // Démarrage du timer, qui rythmera l'animation horloge = new Timer(40, this); diff --git a/linea/linea/NiveauxDataConnect.java b/linea/linea/NiveauxDataConnect.java index 90c3845..fe80508 100644 --- a/linea/linea/NiveauxDataConnect.java +++ b/linea/linea/NiveauxDataConnect.java @@ -1,5 +1,6 @@ package linea; +import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; @@ -20,8 +21,19 @@ public class NiveauxDataConnect { // Il crée la table niveau si elle n'existe pas déjà // Il insérer les niveaux dans la table niveau directement // Pour éviter à le faire à chaque fois que le jeu est lancé + // NB : Le fichier de la base de donnée est dans le .jar + // 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 // ---------------------------------------------------------------- public NiveauxDataConnect() throws ClassNotFoundException { + // Initialisation de la base de données dans le répertoire courant de l'utilisateur + // Cela permet de pouvoir lire et écrire sur la base de données, contrairement à la base de données + try { + bddInit.init(); + }catch (IOException e) { + throw new RuntimeException("Erreur lors de l'initialisation de la base de données : " + e.getMessage()); + } // Initialisation de la connexion à la base de données Connection conn = getConnection(); if (conn != null) { @@ -52,7 +64,7 @@ public class NiveauxDataConnect { return conn; } catch (SQLException e) { System.err.println("Erreur lors de la connexion à la base de données : " + e.getMessage()); - return null; + return null; } } diff --git a/linea/linea/bddInit.java b/linea/linea/bddInit.java new file mode 100644 index 0000000..574fdfd --- /dev/null +++ b/linea/linea/bddInit.java @@ -0,0 +1,37 @@ +package linea; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; + +//-------------------------------------------------------------------------- +// Classe pour l'initialisation de la base de données +// Elle est utilisée pour copier la base de données depuis le .jar vers le répertoire courant de l'utilisateur +// Cela permet de pouvoir lire et écrire sur la base de données, contrairement à la base de données dans le .jar qui est en lecture seule +//-------------------------------------------------------------------------- + +public class bddInit { + + public static void init() throws IOException { + String dbFileName = "Niveaux.db"; + // On crée l'objet qui correspond au fichier de la base de données dans le répertoire courant de l'utilisateur + File dbFile = new File(dbFileName); + + // Si le fichier de la base de données n'existe pas, on le crée en le copiant depuis le .jar + if(!dbFile.exists()){ + // Récupération de la BDD du .jar ou "main/ressources" dans le projet + InputStream is = bddInit.class.getResourceAsStream("/" + dbFileName); + // Si le fichier est introuvable dans le .jar, on affiche une erreur + if (is == null) { + throw new FileNotFoundException("La base de données " + dbFileName + " est introuvable dans le .jar"); + } + // Copie du fichier de la base de données depuis le .jar vers le répertoire courant de l'utilisateur + Files.copy(is, dbFile.toPath()); + // Fermeture du flux d'entrée + is.close(); + System.out.println("Base de données " + dbFileName + " copiée depuis le .jar vers le répertoire courant de l'utilisateur"); + } + } +}