From e60d785b772fc6fb332d37f679811a5d16633ca9 Mon Sep 17 00:00:00 2001 From: BabaTheUnicorn Date: Fri, 15 Apr 2016 17:43:11 +0200 Subject: [PATCH 1/3] =?UTF-8?q?Classe=20des=20requ=C3=AAtes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit J'ai commencé à créer les requêtes pour la connexion à la base de données --- FinstereFlure/src/Model/ClasseSQL.java | 98 ++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 FinstereFlure/src/Model/ClasseSQL.java diff --git a/FinstereFlure/src/Model/ClasseSQL.java b/FinstereFlure/src/Model/ClasseSQL.java new file mode 100644 index 0000000..639052b --- /dev/null +++ b/FinstereFlure/src/Model/ClasseSQL.java @@ -0,0 +1,98 @@ +/* + * Cette classe contient toutes les requêtes SQL pour communiquer avec la base de données + */ +package Model; + +import java.sql.*; +import java.util.Scanner; +/** + * + * @author Laurine + */ +public class ClasseSQL { + public static void main (String[]args){ + String connectUrl = "jdbc:mysql://localhost/nomdelabase"; //à changer avec l'url de la bdd + String username = "nom", password ="mdp"; //utilisé pour getConnexion + Connection con = null; + try{ + Class.forName(" com.mysql.jdbc.Driver ").newInstance(); // on enregistre le driver JDBC + con = DriverManager.getConnection( connectUrl, username, password); + System.out.println ("Database connection established."); + + /* A partir d'ici, ce sont toutes les requêtes, sans soucis de connexion avec l'interface graphique */ + + /* Dans cette requête, on crée un tuple avec le pseudo et le mdp*/ + Scanner sc1 = new Scanner(System.in); + System.out.println("Veuillez saisir un pseudonyme"); + String pseudo = sc1.nextLine(); + Scanner sc2 = new Scanner(System.in); + System.out.println("Veuillez saisir un mot de passe"); + String mdp = sc2.nextLine(); + + Statement req1 = con.createStatement(); + int nb = req1.executeUpdate("INSERT INTO CompteJoueur (Pseudonyme, MotDePasse) " + "VALUES (pseudo, mdp) "); + + /* + * A partir d'ici, il faut (dans l'idéal) que l'utilisateur clique sur la case pour que les instructions s'exécutent. + */ + + /* Requête pour entrer le nom */ + Scanner sc3 = new Scanner(System.in); + String nom = sc3.nextLine(); + + Statement req2 = con.createStatement(); + nb = req2.executeUpdate("UPDATE CompteJoueur" + "SET Nom = nom"); + + /* Requête pour entrer le prénom */ + Scanner sc4 = new Scanner(System.in); + String prenom = sc4.nextLine(); + + Statement req3 = con.createStatement(); + nb = req3.executeUpdate("UPDATE CompteJoueur" + "SET Prenom = prenom"); + + /* Requête pour donner un avatar */ + Scanner sc5 = new Scanner(System.in); + String avatar = sc5.nextLine(); + + Statement req4 = con.createStatement(); + nb = req4.executeUpdate("UPDATE CompteJoueur" + "SET Avatar = url "); + /* + * Pour l'avatar, voir si on héberge l'image ou si c'est possible de la récupérer de l'ordinateur + */ + + /* + * Attention requête pour le nombre de parties gagnées :o !!! + * Ici on récupère le nombre de parties gagnées dans le premier morceau + */ + + Statement stmt = con.createStatement(); + String query = "SELECT distinct Pseudonyme FROM Partie" + "WHERE Pseudonyme = pseudo"; + ResultSet rs = stmt.executeQuery(query); + int nbPartiesGagnees = 0; + while (rs.next()) { + nbPartiesGagnees += 1; + } + + /* Deuxième morceau : on enregistre le nombre de parties gagnées */ + + Statement req5 = con.createStatement(); + nb = req5.executeUpdate("UPDATE CompteJoueur" + "SET NbPartiesGagnées = nbPartiesGagnees"); + + } + catch (Exception e){ + System.out.println("Erreur"); + } + + + finally { + // à la fin, on ferme la connection avec la BdD + if (con != null) { + try { + con.close(); + System.out.println ("Database connection terminated."); + } + catch (Exception e) { /* ignore close errors */ } + } + } + } +} From 7516246862a31dc1587d76d23c5014b7317447fb Mon Sep 17 00:00:00 2001 From: BabaTheUnicorn Date: Fri, 15 Apr 2016 18:17:36 +0200 Subject: [PATCH 2/3] =?UTF-8?q?Requ=C3=AAte=20pour=20connexion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit J'ai rajouté la requête pour la connexion. Cependant je ne sais pas si ça compare correctement. --- FinstereFlure/src/Model/ClasseSQL.java | 29 +++++++++++++++++--------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/FinstereFlure/src/Model/ClasseSQL.java b/FinstereFlure/src/Model/ClasseSQL.java index 639052b..f2604c6 100644 --- a/FinstereFlure/src/Model/ClasseSQL.java +++ b/FinstereFlure/src/Model/ClasseSQL.java @@ -39,26 +39,20 @@ public static void main (String[]args){ /* Requête pour entrer le nom */ Scanner sc3 = new Scanner(System.in); String nom = sc3.nextLine(); - Statement req2 = con.createStatement(); nb = req2.executeUpdate("UPDATE CompteJoueur" + "SET Nom = nom"); /* Requête pour entrer le prénom */ Scanner sc4 = new Scanner(System.in); String prenom = sc4.nextLine(); - Statement req3 = con.createStatement(); nb = req3.executeUpdate("UPDATE CompteJoueur" + "SET Prenom = prenom"); /* Requête pour donner un avatar */ Scanner sc5 = new Scanner(System.in); String avatar = sc5.nextLine(); - Statement req4 = con.createStatement(); - nb = req4.executeUpdate("UPDATE CompteJoueur" + "SET Avatar = url "); - /* - * Pour l'avatar, voir si on héberge l'image ou si c'est possible de la récupérer de l'ordinateur - */ + nb = req4.executeUpdate("UPDATE CompteJoueur" + "SET Avatar = url "); // Voir si on héberge l'avatar sur un site ou si on peut le récupérer de l'ordi de l'utilisateur /* * Attention requête pour le nombre de parties gagnées :o !!! @@ -72,11 +66,26 @@ public static void main (String[]args){ while (rs.next()) { nbPartiesGagnees += 1; } + Statement req5 = con.createStatement(); // Deuxième morceau : On enregistre le nombre de parties gagnées + nb = req5.executeUpdate("UPDATE CompteJoueur" + "SET NbPartiesGagnées = nbPartiesGagnees"); + + /* + * Requête pour la connection + */ + try { + Scanner sc6 = new Scanner(System.in); + String pseudoCo = sc6.nextLine(); + Scanner sc7 = new Scanner(System.in); + String mdpCo = sc7.nextLine(); + Statement req6 = con.createStatement(); + String query2 = "SELECT Pseudonyme, MotDePasse FROM CompteJoueur" + "WHERE Pseudonyme LIKE pseudoCo AND MotDePasse LIKE mdpCo"; + ResultSet res = stmt.executeQuery(query2); + } + catch (Exception e){ + System.out.println("Identifiants incorrects, ou je me suis fail, mais ça c'est pas possible."); + } - /* Deuxième morceau : on enregistre le nombre de parties gagnées */ - Statement req5 = con.createStatement(); - nb = req5.executeUpdate("UPDATE CompteJoueur" + "SET NbPartiesGagnées = nbPartiesGagnees"); } catch (Exception e){ From ea944290eea3a9ccd34dbcd73d29329117a5dcaf Mon Sep 17 00:00:00 2001 From: BabaTheUnicorn Date: Mon, 18 Apr 2016 11:42:05 +0200 Subject: [PATCH 3/3] =?UTF-8?q?R=C3=A9organisation=20de=20la=20classe?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit J'ai mis chaque requête dans une méthode, et j'ai fait la méthode pour insérer un avatar. --- FinstereFlure/nbproject/private/private.xml | 9 + FinstereFlure/src/Model/ClasseSQL.java | 239 ++++++++++++++------ 2 files changed, 185 insertions(+), 63 deletions(-) create mode 100644 FinstereFlure/nbproject/private/private.xml diff --git a/FinstereFlure/nbproject/private/private.xml b/FinstereFlure/nbproject/private/private.xml new file mode 100644 index 0000000..db5ee8d --- /dev/null +++ b/FinstereFlure/nbproject/private/private.xml @@ -0,0 +1,9 @@ + + + + + + file:/C:/Users/Laurine/Desktop/Java-Awakens/FinstereFlure/src/Model/ClasseSQL.java + + + diff --git a/FinstereFlure/src/Model/ClasseSQL.java b/FinstereFlure/src/Model/ClasseSQL.java index f2604c6..63e2d0b 100644 --- a/FinstereFlure/src/Model/ClasseSQL.java +++ b/FinstereFlure/src/Model/ClasseSQL.java @@ -3,8 +3,11 @@ */ package Model; +import java.io.*; import java.sql.*; import java.util.Scanner; +import java.util.logging.Level; +import java.util.logging.Logger; /** * * @author Laurine @@ -18,90 +21,200 @@ public static void main (String[]args){ Class.forName(" com.mysql.jdbc.Driver ").newInstance(); // on enregistre le driver JDBC con = DriverManager.getConnection( connectUrl, username, password); System.out.println ("Database connection established."); - - /* A partir d'ici, ce sont toutes les requêtes, sans soucis de connexion avec l'interface graphique */ - - /* Dans cette requête, on crée un tuple avec le pseudo et le mdp*/ - Scanner sc1 = new Scanner(System.in); - System.out.println("Veuillez saisir un pseudonyme"); - String pseudo = sc1.nextLine(); - Scanner sc2 = new Scanner(System.in); - System.out.println("Veuillez saisir un mot de passe"); - String mdp = sc2.nextLine(); - - Statement req1 = con.createStatement(); - int nb = req1.executeUpdate("INSERT INTO CompteJoueur (Pseudonyme, MotDePasse) " + "VALUES (pseudo, mdp) "); - - /* - * A partir d'ici, il faut (dans l'idéal) que l'utilisateur clique sur la case pour que les instructions s'exécutent. - */ - - /* Requête pour entrer le nom */ + } + catch (Exception e){ + System.out.println("Erreur"); + } + finally { + // à la fin, on ferme la connection avec la BdD + if (con != null) { + try { + con.close(); + System.out.println ("Database connection terminated."); + } + catch (Exception e) { /* ignore close errors */ } + } + } + } + + /** + * Cette méthode crée un compte utilisateur avec comme entrées le pseudonyme et le mot de passe + * @param con connexion à la base de donnée + */ + public void creationCompte(Connection con){ + try { + Scanner sc1 = new Scanner(System.in); + System.out.println("Veuillez saisir un pseudonyme"); + String pseudo = sc1.nextLine(); + Scanner sc2 = new Scanner(System.in); + System.out.println("Veuillez saisir un mot de passe"); + String mdp = sc2.nextLine(); + + Statement req1 = con.createStatement(); + int nb = req1.executeUpdate("INSERT INTO CompteJoueur (Pseudonyme, MotDePasse) " + "VALUES (pseudo, mdp) "); + } + catch (SQLException ex) { + Logger.getLogger(ClasseSQL.class.getName()).log(Level.SEVERE, null, ex); + } + } + + /** + * Cette méthode permet de renseigner le nom de l'utilisateur + * @param con connexion à la bdd + */ + public void entrerNom(Connection con){ + try { Scanner sc3 = new Scanner(System.in); String nom = sc3.nextLine(); Statement req2 = con.createStatement(); - nb = req2.executeUpdate("UPDATE CompteJoueur" + "SET Nom = nom"); - - /* Requête pour entrer le prénom */ + int nb = req2.executeUpdate("UPDATE CompteJoueur" + "SET Nom = nom"); + } + catch (SQLException ex) { + Logger.getLogger(ClasseSQL.class.getName()).log(Level.SEVERE, null, ex); + } + } + + /** + * Cette méthode permet de renseigner le nom de l'utilisateur + * @param con connexion à la bdd + */ + public void entrerPrenom(Connection con){ + try{ Scanner sc4 = new Scanner(System.in); String prenom = sc4.nextLine(); Statement req3 = con.createStatement(); - nb = req3.executeUpdate("UPDATE CompteJoueur" + "SET Prenom = prenom"); - - /* Requête pour donner un avatar */ - Scanner sc5 = new Scanner(System.in); - String avatar = sc5.nextLine(); - Statement req4 = con.createStatement(); - nb = req4.executeUpdate("UPDATE CompteJoueur" + "SET Avatar = url "); // Voir si on héberge l'avatar sur un site ou si on peut le récupérer de l'ordi de l'utilisateur - - /* - * Attention requête pour le nombre de parties gagnées :o !!! - * Ici on récupère le nombre de parties gagnées dans le premier morceau - */ - - Statement stmt = con.createStatement(); - String query = "SELECT distinct Pseudonyme FROM Partie" + "WHERE Pseudonyme = pseudo"; - ResultSet rs = stmt.executeQuery(query); - int nbPartiesGagnees = 0; - while (rs.next()) { - nbPartiesGagnees += 1; + int nb = req3.executeUpdate("UPDATE CompteJoueur" + "SET Prenom = prenom"); + } + catch (SQLException ex) { + Logger.getLogger(ClasseSQL.class.getName()).log(Level.SEVERE, null, ex); + } + } + + /** + * Méthode pour insérer une image dans l'avatar + * @param con + */ + public void insererAvatar(Connection con){ + Scanner imLoc = new Scanner(System.in); + String location = imLoc.nextLine(); + Scanner nomIm = new Scanner(System.in); + String nomPourIm = nomIm.nextLine(); + File avatar = new File(location); + FileInputStream istreamImage = null; + try { + istreamImage = new FileInputStream(avatar); + } + catch (FileNotFoundException ex) { + Logger.getLogger(ClasseSQL.class.getName()).log(Level.SEVERE, null, ex); + } + try { //on crée la table image + tableImage(con); + } + catch (Exception ex) { + Logger.getLogger(ClasseSQL.class.getName()).log(Level.SEVERE, null, ex); + } + try { + // on insère l'image dans la base de données + PreparedStatement ps = con.prepareStatement("INSERT INTO image (name, img) values (?,?)"); + try { + ps.setString(1, nomPourIm); + ps.setBinaryStream(2, istreamImage, (int) avatar.length()); + ps.executeUpdate(); + } + finally { + ps.close(); } - Statement req5 = con.createStatement(); // Deuxième morceau : On enregistre le nombre de parties gagnées - nb = req5.executeUpdate("UPDATE CompteJoueur" + "SET NbPartiesGagnées = nbPartiesGagnees"); + //on récupère l'image pour l'insérer dans l'attribut "avatar" + Statement recupImage = con.createStatement(); + String query3 = "SELECT nomPourIm FROM image"; + ResultSet res = recupImage.executeQuery(query3); + Statement reqIm = con.createStatement(); + int nb = reqIm.executeUpdate("UPDATE CompteJoueur" + "SET Avatar = res"); - /* - * Requête pour la connection - */ + } + catch (SQLException ex) { + Logger.getLogger(ClasseSQL.class.getName()).log(Level.SEVERE, null, ex); + } + finally { try { + istreamImage.close(); + } catch (IOException ex) { + Logger.getLogger(ClasseSQL.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + + /** + * Méthode pour créer une table "image" dans la bdd + * @param con + * @throws Exception vu qu'on l'appelle dans insererAvatar, c'est cette méthode qui gêrera l'erreur + */ + public void tableImage (Connection con) throws Exception{ + Statement creation = con.createStatement(); + int nb = creation.executeUpdate("CREATE TABLE image " + "name varchar(20) NOT NULL" + "img mediumblob" + " PRIMARY KEY (name)"); + } + + /** + * Méthode pour enregistrer une partie + * @param con + * nbTour correspond au nombre de tour au bout desquels la partie est gagnée. Rappel : au bout de 14, la partie est finie. + */ + public void enregistrerPartie(Connection con){ + try { + Statement req7 = con.createStatement(); + int nb = req7.executeUpdate("INSERT INTO Partie" + "Values (DEFAULT, nbTour)"); + } //DEFAULT est utilisé pour les données avec "NumAuto" pour remplir automatiquement. On peut aussi ne rien mettre. + catch (SQLException ex) { + Logger.getLogger(ClasseSQL.class.getName()).log(Level.SEVERE, null, ex); + } + } + + /** + * Méthode pour connecter un compte joueur. Elle demande le pseudonyme et le mdp. + * @param con + */ + public void connexion(Connection con){ + try { Scanner sc6 = new Scanner(System.in); + System.out.println("Veuillez entrer votre pseudonyme"); String pseudoCo = sc6.nextLine(); Scanner sc7 = new Scanner(System.in); + System.out.println("Veuillez entrer votre mot de passe"); String mdpCo = sc7.nextLine(); Statement req6 = con.createStatement(); String query2 = "SELECT Pseudonyme, MotDePasse FROM CompteJoueur" + "WHERE Pseudonyme LIKE pseudoCo AND MotDePasse LIKE mdpCo"; - ResultSet res = stmt.executeQuery(query2); + ResultSet res = req6.executeQuery(query2); } catch (Exception e){ System.out.println("Identifiants incorrects, ou je me suis fail, mais ça c'est pas possible."); } - - - + } + + /** + * Crée une occurrence de "participer" + * @param con + */ + public void participer(Connection con){ + try { + Statement req8 = con.createStatement(); + int nb = req8.executeUpdate("INSERT INTO Participer" + "Values (pseudo1, DEFAULT"); } - catch (Exception e){ - System.out.println("Erreur"); + catch (SQLException ex) { + Logger.getLogger(ClasseSQL.class.getName()).log(Level.SEVERE, null, ex); } - - - finally { - // à la fin, on ferme la connection avec la BdD - if (con != null) { - try { - con.close(); - System.out.println ("Database connection terminated."); - } - catch (Exception e) { /* ignore close errors */ } - } + } + + /** + * Crée une occurrence de "gagner" table de la bdd + * @param con + */ + public void gagner(Connection con){ + try { + Statement req8 = con.createStatement(); + int nb = req8.executeUpdate("INSERT INTO Gagner" + "Values ( , DEFAULT"); + } //revoir le modèle E/A et le modèle relationnel. + catch (SQLException ex) { + Logger.getLogger(ClasseSQL.class.getName()).log(Level.SEVERE, null, ex); } } }