BDD Fct GetPseudo / TailleBDD / AjoutUtilisateurs fonctionnelles

This commit is contained in:
Auriane Lartigue 2020-12-28 10:09:51 +04:00
parent 338e52671e
commit a4df947767
3 changed files with 192 additions and 79 deletions

View file

@ -1,39 +1,39 @@
chatapp/Model/DataBase.java
chatapp.Model.DataBase
chatapp/Model/ListUtilisateurs.java
chatapp.Model.ListUtilisateurs
chatapp/Model/Utilisateur.java
chatapp.Model.Utilisateur
chatapp/Model/MessageHorodate.java
chatapp.Model.MessageHorodate
chatapp/Launcher.java
chatapp.Launcher
chatapp/Protocol/RunnerEcouteTCP.java
chatapp.Protocol.RunnerEcouteTCP
chatapp/View/DemarrerSession.java
chatapp.View.DemarrerSession
chatapp/View/FenetreSession.java
chatapp.View.FenetreSession
chatapp.View.FenetreSession$1
chatapp/Controller/ChatApp.java
chatapp.Controller.ChatApp
chatapp/View/DemarrerSession.java
chatapp.View.DemarrerSession
chatapp/Protocol/RunnerEcouteUDP.java
chatapp.Protocol.RunnerEcouteUDP
chatapp/Protocol/UDPEchange.java
chatapp.Protocol.RunnerUDP
chatapp.Protocol.UDPEchange
chatapp/Main.java
chatapp.Main
chatapp/Model/Utilisateur.java
chatapp.Model.Utilisateur
chatapp/View/ConnexionScreen.java
chatapp.View.ConnexionScreen
chatapp/View/ChangementPseudo.java
chatapp.View.ChangementPseudo
chatapp/View/Clavardage.java
chatapp.View.Clavardage
chatapp.View.Clavardage$1
chatapp/Protocol/SessionClavardage.java
chatapp.Protocol.SessionClavardage
chatapp/View/ConnexionScreen.java
chatapp.View.ConnexionScreen
chatapp/View/View_Utilisateurs.java
chatapp.View.View_Utilisateurs
chatapp/Launcher.java
chatapp.Launcher
chatapp/Model/ListUtilisateurs.java
chatapp.Model.ListUtilisateurs
chatapp/View/View_Menu.java
chatapp.View.View_Menu
chatapp/View/ChangementPseudo.java
chatapp.View.ChangementPseudo
chatapp/Model/MessageHorodate.java
chatapp.Model.MessageHorodate
chatapp/View/View_Utilisateurs.java
chatapp.View.View_Utilisateurs
chatapp/Protocol/RunnerEcouteTCP.java
chatapp.Protocol.RunnerEcouteTCP
chatapp/Protocol/UDPEchange.java
chatapp.Protocol.RunnerUDP
chatapp.Protocol.UDPEchange
chatapp/Controller/ChatApp.java
chatapp.Controller.ChatApp
chatapp/Main.java
chatapp.Main
chatapp/Protocol/SessionClavardage.java
chatapp.Protocol.SessionClavardage
chatapp/Model/DataBase.java
chatapp.Model.DataBase
chatapp/Protocol/RunnerEcouteUDP.java
chatapp.Protocol.RunnerEcouteUDP

View file

@ -2,6 +2,6 @@ package chatapp;
public class Launcher {
public static void main(String[] args) {
Main.main(args);
// Main.main(args);
}
}

View file

@ -30,19 +30,25 @@ public class DataBase {
private static DataBase instance = null; // Singleton
/**
* Constructeur de la database
* On installe le driver et on établit la connection.
*/
public DataBase() {
try {
// Besoin d'installer le driver JDBC entre java IDE et le system DBMS pour faire un pont entre les deux
//Besoin d'installer le driver JDBC entre java IDE et le system DBMS pour faire un pont entre les deux
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("Driver Installe");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("Echec installation Driver");
}
try {
// Etablir une connexion , forme : (url, "myLogin", "myPassword");
this.connection = DriverManager.getConnection("jdbc:mysql://localhost/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "1234");
//Etablir une connexion , forme : (url, "myLogin", "myPassword");
// Nabil : DECOMMENTER CETTE LIGNE
//this.connection = DriverManager.getConnection("jdbc:mysql://localhost/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "1234");
// Auriane : DECOMMENTER CETTE LIGNE
this.connection = DriverManager.getConnection("jdbc:mysql://localhost:8889/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "root");
//this.connection = DriverManager.getConnection(this.DBurl,login,pswd);
System.out.println("Connexion Etablie");
} catch (SQLException e) {
@ -51,6 +57,10 @@ public class DataBase {
}
}
/**
* Méthode permettant de renvoyer une instance de la classe DataBase
* @return Retourne l'instance du singleton DataBase.
*/
public static DataBase getInstance() {
synchronized (DataBase.class) {
DataBase DB = instance;
@ -61,7 +71,7 @@ public class DataBase {
}
}
/*
/**
* Methode permettant de creer une table pour stocker les messages entre deux utilisateurs
* @param ID1 Id du premier utilisateur
* @param ID2 Id du second utilisateur
@ -91,7 +101,6 @@ public class DataBase {
e.printStackTrace();
System.out.println("Echec creation Statement");
}
//Execute la donnée SQL statement passe en parametre
try {
Ps.executeUpdate();
@ -101,7 +110,7 @@ public class DataBase {
}
}
/*
/**
* Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee
* @param ID Id de l'utilisateur qui vient de changer de pseudo
* @param Pseudo Nouveau Pseudo de l'utilisateur
@ -112,8 +121,8 @@ public class DataBase {
//Statement est utilisé pour envoyer une requete SQL à la base de donnee
try {
Ps = connection.prepareStatement(requete);
Ps.setString(1, Pseudo);
Ps.setString(2, ID);
Ps.setString(1, Pseudo); // ? n°1 devient la valeur contenu dans Pseudo
Ps.setString(2, ID); // ? n°2 devient la valeur contenu dans ID
System.out.println("Statement cree");
} catch (SQLException e) {
e.printStackTrace();
@ -130,7 +139,7 @@ public class DataBase {
/*
/**
* Methode permettant de mettre a jour le pseudo d'un utilisateur en fonction de son ID dans la base de donnee
* @param IDdest Id de l'utilisateur Destinataire du message
* @param IDdest Id de celui qui envoi le message
@ -154,15 +163,15 @@ public class DataBase {
//Statement est utilisé pour envoyer une requete SQL à la base de donnee
try {
Ps = connection.prepareStatement(requete);
Ps.setString(1, IDdest);
Ps.setString(2, IDsrc);
Ps.setString(3, Msg);
Ps.setString(1, IDdest); // ? n°1 devient la valeur contenu dans IDdest
Ps.setString(2, IDsrc); // ? n°2 devient la valeur contenu dans IDsrc
Ps.setString(3, Msg); // ? n°3 devient la valeur contenu dans Msg
//La date de l'envoi n'a pas besoin d'être renseigné, elle est automatique
System.out.println("Statement cree");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Echec creation Statement");
}
//Execute la donnée SQL statement passe en parametre
try {
Ps.executeUpdate();
@ -173,52 +182,54 @@ public class DataBase {
}
/*
/**
* Methode permettant d'ajouter un utilisateur dans la base de donnée si celui-ci n'existe pas deja
* @param ID Id de l'utilisateur que l'on veut rajouter
* @param Pseudo pseudo actuelle de l'utilisateur
*/
public void ajoutUtilisateurs(String ID , String Pseudo ) {
// Verification que l'utilisateur n'existe pas
String existe= "SELECT Pseudo FROM Utilisateurs WHERE ID = " + ID +",";
String existe= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + ID +"'";
Statement stmt = null;
ResultSet rs = null ;
try {
stmt = this.connection.createStatement();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
rs = stmt.executeQuery(existe);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
String P = "" ;
try {
if(rs.next()){
P = rs.getString("Pseudo");
// On recupere le pseudo de l'utilisateur dont l'ID est le parametre d'entree ID
// Si l'utilisateur n'est pas encore dans la base de donnée , P reste vide
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
if( !P.equals("") ) {
// L'utilisateur existe deja
if (!P.equals(Pseudo)){
System.out.println("L'utilisateur " + P + " existe deja");
if (!P.equals(Pseudo)){ // On regarde si le pseudo associé à ID dans la base de donnee est bien a jour
this.majPseudo(ID,Pseudo); // On met a jour le nouveau pseudo
}
}
else {
// L'utilisateur n'existe pas , on va le rajouter.
System.out.println("On rajoute l'utilisateur " + Pseudo);
String requete = "INSERT INTO `Utilisateurs` (`ID`, `Pseudo`, `Actif`) VALUES ( ? , ? , '1')";
PreparedStatement Ps = null;
//Statement est utilisé pour envoyer une requete SQL à la base de donnee
try {
Ps = connection.prepareStatement(requete);
Ps.setString(1, ID);
Ps.setString(2, Pseudo);
Ps.setString(1, ID); // ? n°1 devient la valeur contenu dans ID
Ps.setString(2, Pseudo); // ? n°2 devient la valeur contenu dans Pseudo
System.out.println("Statement cree");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("Echec creation Statement");
}
//Execute la donnée SQL statement passe en parametre
try {
Ps.executeUpdate();
@ -229,20 +240,20 @@ public class DataBase {
}
}
/*
/**
* Methode permettant de mettre a jour les utilisateurs actuellement actif
* @param ID Id de l'utilisateur qui vient de se connecter ou deconnecter
* @param connecte Boolean true si il est connecte , false sinon
* @param Id Id de l'utilisateur qui vient de se connecter ou deconnecter
* @param Connecte Boolean true si il est connecte , false sinon
*/
public void majUtilisateursActifs(Boolean Connecte, String Id) {
String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?";
PreparedStatement Ps = null ;
Integer Actif = Connecte ? 1 : 0;
Integer Actif = Connecte ? 1 : 0; // True -> 1 , False -> 0
//Statement est utilisé pour envoyer une requete SQL à la base de donnee
try {
Ps = connection.prepareStatement(requete);
Ps.setInt(1, Actif);
Ps.setString(2, Id);
Ps.setInt(1, Actif); // ? n°1 devient la valeur contenu dans Actif (1 ou 0)
Ps.setString(2, Id); // // ? n°2 devient la valeur contenu dans Id
System.out.println("Statement cree");
} catch (SQLException e) {
e.printStackTrace();
@ -257,10 +268,11 @@ public class DataBase {
}
}
/*
/**
* Methode permettant de recuperer les N derniers messages envoyés entre 2 utilisateurs
* @param ID Utilisateur associé a ChatApp
* @param destinataire Celui avec qui correspond ID
* @param IDdestinataire Celui avec qui correspond ID
* @param N le nombre de messages souhaités
* @return Les N derniers Messages
*/
public String recupNMsg(String ID, String IDdestinataire, int N) {
@ -273,11 +285,11 @@ public class DataBase {
grand = IDdestinataire;
}
else {
petit = ID;
grand = IDdestinataire ;
petit = IDdestinataire;
grand = ID ;
}
String nomTable = "Chat_" + petit + "_" + grand ;
String requete= "SELECT * FROM nomTable";
String requete = "SELECT * FROM "+ nomTable;
Statement stmt = null;
ResultSet rs = null ;
try {
@ -290,7 +302,10 @@ public class DataBase {
} catch (SQLException throwables) {
throwables.printStackTrace();
}
Integer Taille = tailleBDD(nomTable);
if(Taille < N ){
N = Taille ;
}
for(int i = 0 ; i < N; i++){
try {
if( rs.next()){
@ -304,24 +319,25 @@ public class DataBase {
String PseudoSource = getPseudo(IDSource) ;
Msg += ( PseudoSource + "(" + Envoi + ") : " + Message );
}
Msg += '\n';
}
// MSG de la forme :
// Source (Date) : Texte
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return Msg ;
}
/*
/**
* Methode permettant de recuperer le pseudo actuel d'un utilisateur en fonction de son ID
* @param ID Id de l'utilsateur dont on veut connaitre le pseudo
* @param idSource Id de l'utilsateur dont on veut connaitre le pseudo
* @return Pseudo
*/
private String getPseudo(String idSource) {
String Pseudo = "" ;
String requete= "SELECT * FROM `Utilisateurs` WHERE ID = " + idSource;
String requete= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + idSource + "'";
Statement stmt = null;
ResultSet rs = null ;
try {
@ -335,7 +351,7 @@ public class DataBase {
throwables.printStackTrace();
}
try {
if (! rs.getString("Pseudo").equals(null) ){
if (rs.next()){
Pseudo = rs.getString("Pseudo") ;
}
} catch (SQLException throwables) {
@ -344,4 +360,101 @@ public class DataBase {
return Pseudo ;
}
/**
* Methode permettant de recuperer les messages d'une plage de donnée [deb,fin] envoyés entre 2 utilisateurs
* @param ID Utilisateur associé a ChatApp
* @param IDdestinataire Celui avec qui correspond ID
* @param deb On veut les messages à partir de l'indice deb
* @param fin On veut les messages jusqu'a l'indice fin
* @return Les messages d'une plage de donnée [deb,fin]
*/
public String recupMsg(String ID, String IDdestinataire, int deb , int fin) {
String Msg = "" ;
String petit;
String grand;
int comparaison = ID.compareTo(IDdestinataire);
if (comparaison < 0) {
petit = ID;
grand = IDdestinataire;
}
else {
petit = IDdestinataire;
grand = ID ;
}
String nomTable = "Chat_" + petit + "_" + grand ;
String requete = "SELECT * FROM "+ nomTable;
Statement stmt = null;
ResultSet rs = null ;
try {
stmt = this.connection.createStatement();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
rs = stmt.executeQuery(requete);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
for(int i = 0 ; i < fin; i++){
try {
if( rs.next()){
String IDSource = rs.getString("Source");
String Envoi = rs.getTimestamp("Envoi").toString();
String Message = rs.getString("Message");
if (IDSource.equals(ID)){
//Msg += ( "Moi (" + Envoi + ") : " + Message ) ;
}
else {
String PseudoSource = getPseudo(IDSource) ;
Msg += ( PseudoSource + "(" + Envoi + ") : " + Message );
}
Msg += '\n';
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
return Msg ;
}
/**
* Cette méthode sert à recuperer la taille d'un base de donnée
* @param nomTable Nom de la table de donnée dont on veut récuperer le nom
* @return Taille de la BDD
*/
public Integer tailleBDD(String nomTable) {
Integer Taille = 0 ;
String requete = "SELECT * FROM `"+nomTable+ "`";
Statement stmt = null;
ResultSet rs = null ;
try {
stmt = this.connection.createStatement();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
try {
rs = stmt.executeQuery(requete);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
while(true){
try {
if (!rs.next()) break;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
Taille++;
}
return Taille;
}
public static void main(String[] args) {
DataBase db = DataBase.getInstance();
String Msg = db.recupNMsg("MacYAYA", "MacBibil", 5);
System.out.println(Msg);
}
}