BDD Fct GetPseudo / TailleBDD / AjoutUtilisateurs fonctionnelles

このコミットが含まれているのは:
Auriane Lartigue 2020-12-28 10:09:51 +04:00
コミット a4df947767
3個のファイルの変更192行の追加79行の削除

ファイルの表示

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

ファイルの表示

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

ファイルの表示

@ -30,19 +30,25 @@ public class DataBase {
private static DataBase instance = null; // Singleton private static DataBase instance = null; // Singleton
/**
* Constructeur de la database
* On installe le driver et on établit la connection.
*/
public DataBase() { public DataBase() {
try { 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"); Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("Driver Installe"); System.out.println("Driver Installe");
} catch (ClassNotFoundException e) { } catch (ClassNotFoundException e) {
e.printStackTrace(); e.printStackTrace();
System.out.println("Echec installation Driver"); System.out.println("Echec installation Driver");
} }
try { try {
// Etablir une connexion , forme : (url, "myLogin", "myPassword"); //Etablir une connexion , forme : (url, "myLogin", "myPassword");
this.connection = DriverManager.getConnection("jdbc:mysql://localhost/POO_AL_NM?allowPublicKeyRetrieval=true&useSSL=false", "root", "1234"); // 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); //this.connection = DriverManager.getConnection(this.DBurl,login,pswd);
System.out.println("Connexion Etablie"); System.out.println("Connexion Etablie");
} catch (SQLException e) { } 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() { public static DataBase getInstance() {
synchronized (DataBase.class) { synchronized (DataBase.class) {
DataBase DB = instance; DataBase DB = instance;
@ -61,7 +71,7 @@ public class DataBase {
} }
} }
/* /**
* Methode permettant de creer une table pour stocker les messages entre deux utilisateurs * Methode permettant de creer une table pour stocker les messages entre deux utilisateurs
* @param ID1 Id du premier utilisateur * @param ID1 Id du premier utilisateur
* @param ID2 Id du second utilisateur * @param ID2 Id du second utilisateur
@ -91,7 +101,6 @@ public class DataBase {
e.printStackTrace(); e.printStackTrace();
System.out.println("Echec creation Statement"); System.out.println("Echec creation Statement");
} }
//Execute la donnée SQL statement passe en parametre //Execute la donnée SQL statement passe en parametre
try { try {
Ps.executeUpdate(); 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 * 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 ID Id de l'utilisateur qui vient de changer de pseudo
* @param Pseudo Nouveau Pseudo de l'utilisateur * @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 //Statement est utilisé pour envoyer une requete SQL à la base de donnee
try { try {
Ps = connection.prepareStatement(requete); Ps = connection.prepareStatement(requete);
Ps.setString(1, Pseudo); Ps.setString(1, Pseudo); // ? n°1 devient la valeur contenu dans Pseudo
Ps.setString(2, ID); Ps.setString(2, ID); // ? n°2 devient la valeur contenu dans ID
System.out.println("Statement cree"); System.out.println("Statement cree");
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); 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 * 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 l'utilisateur Destinataire du message
* @param IDdest Id de celui qui envoi le 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 //Statement est utilisé pour envoyer une requete SQL à la base de donnee
try { try {
Ps = connection.prepareStatement(requete); Ps = connection.prepareStatement(requete);
Ps.setString(1, IDdest); Ps.setString(1, IDdest); // ? n°1 devient la valeur contenu dans IDdest
Ps.setString(2, IDsrc); Ps.setString(2, IDsrc); // ? n°2 devient la valeur contenu dans IDsrc
Ps.setString(3, Msg); 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"); System.out.println("Statement cree");
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
System.out.println("Echec creation Statement"); System.out.println("Echec creation Statement");
} }
//Execute la donnée SQL statement passe en parametre //Execute la donnée SQL statement passe en parametre
try { try {
Ps.executeUpdate(); 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 * 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 ID Id de l'utilisateur que l'on veut rajouter
* @param Pseudo pseudo actuelle de l'utilisateur * @param Pseudo pseudo actuelle de l'utilisateur
*/ */
public void ajoutUtilisateurs(String ID , String Pseudo ) { public void ajoutUtilisateurs(String ID , String Pseudo ) {
// Verification que l'utilisateur n'existe pas // 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; Statement stmt = null;
ResultSet rs = null ; ResultSet rs = null ;
try { try {
stmt = this.connection.createStatement(); stmt = this.connection.createStatement();
} catch (SQLException throwables) { rs = stmt.executeQuery(existe);
throwables.printStackTrace();
}
try {
rs = stmt.executeQuery(existe);
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
String P = "" ; String P = "" ;
try { try {
P = rs.getString("Pseudo"); 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) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
if( !P.equals("") ) { if( !P.equals("") ) {
// L'utilisateur existe deja // 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 this.majPseudo(ID,Pseudo); // On met a jour le nouveau pseudo
} }
} }
else { 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')"; String requete = "INSERT INTO `Utilisateurs` (`ID`, `Pseudo`, `Actif`) VALUES ( ? , ? , '1')";
PreparedStatement Ps = null; PreparedStatement Ps = null;
//Statement est utilisé pour envoyer une requete SQL à la base de donnee //Statement est utilisé pour envoyer une requete SQL à la base de donnee
try { try {
Ps = connection.prepareStatement(requete); Ps = connection.prepareStatement(requete);
Ps.setString(1, ID); Ps.setString(1, ID); // ? n°1 devient la valeur contenu dans ID
Ps.setString(2, Pseudo); Ps.setString(2, Pseudo); // ? n°2 devient la valeur contenu dans Pseudo
System.out.println("Statement cree"); System.out.println("Statement cree");
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
System.out.println("Echec creation Statement"); System.out.println("Echec creation Statement");
} }
//Execute la donnée SQL statement passe en parametre //Execute la donnée SQL statement passe en parametre
try { try {
Ps.executeUpdate(); Ps.executeUpdate();
@ -229,20 +240,20 @@ public class DataBase {
} }
} }
/* /**
* Methode permettant de mettre a jour les utilisateurs actuellement actif * Methode permettant de mettre a jour les utilisateurs actuellement actif
* @param ID Id de l'utilisateur qui vient de se connecter ou deconnecter * @param Id Id de l'utilisateur qui vient de se connecter ou deconnecter
* @param connecte Boolean true si il est connecte , false sinon * @param Connecte Boolean true si il est connecte , false sinon
*/ */
public void majUtilisateursActifs(Boolean Connecte, String Id) { public void majUtilisateursActifs(Boolean Connecte, String Id) {
String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?"; String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?";
PreparedStatement Ps = null ; 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 //Statement est utilisé pour envoyer une requete SQL à la base de donnee
try { try {
Ps = connection.prepareStatement(requete); Ps = connection.prepareStatement(requete);
Ps.setInt(1, Actif); Ps.setInt(1, Actif); // ? n°1 devient la valeur contenu dans Actif (1 ou 0)
Ps.setString(2, Id); Ps.setString(2, Id); // // ? n°2 devient la valeur contenu dans Id
System.out.println("Statement cree"); System.out.println("Statement cree");
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
@ -257,10 +268,11 @@ public class DataBase {
} }
} }
/* /**
* Methode permettant de recuperer les N derniers messages envoyés entre 2 utilisateurs * Methode permettant de recuperer les N derniers messages envoyés entre 2 utilisateurs
* @param ID Utilisateur associé a ChatApp * @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 * @return Les N derniers Messages
*/ */
public String recupNMsg(String ID, String IDdestinataire, int N) { public String recupNMsg(String ID, String IDdestinataire, int N) {
@ -273,11 +285,11 @@ public class DataBase {
grand = IDdestinataire; grand = IDdestinataire;
} }
else { else {
petit = ID; petit = IDdestinataire;
grand = IDdestinataire ; grand = ID ;
} }
String nomTable = "Chat_" + petit + "_" + grand ; String nomTable = "Chat_" + petit + "_" + grand ;
String requete= "SELECT * FROM nomTable"; String requete = "SELECT * FROM "+ nomTable;
Statement stmt = null; Statement stmt = null;
ResultSet rs = null ; ResultSet rs = null ;
try { try {
@ -290,7 +302,10 @@ public class DataBase {
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
Integer Taille = tailleBDD(nomTable);
if(Taille < N ){
N = Taille ;
}
for(int i = 0 ; i < N; i++){ for(int i = 0 ; i < N; i++){
try { try {
if( rs.next()){ if( rs.next()){
@ -304,24 +319,25 @@ public class DataBase {
String PseudoSource = getPseudo(IDSource) ; String PseudoSource = getPseudo(IDSource) ;
Msg += ( PseudoSource + "(" + Envoi + ") : " + Message ); Msg += ( PseudoSource + "(" + Envoi + ") : " + Message );
} }
Msg += '\n';
} }
// MSG de la forme :
// Source (Date) : Texte
} catch (SQLException throwables) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
} }
return Msg ; return Msg ;
} }
/* /**
* Methode permettant de recuperer le pseudo actuel d'un utilisateur en fonction de son ID * 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 * @return Pseudo
*/ */
private String getPseudo(String idSource) { private String getPseudo(String idSource) {
String Pseudo = "" ; String Pseudo = "" ;
String requete= "SELECT * FROM `Utilisateurs` WHERE ID = " + idSource; String requete= "SELECT * FROM `Utilisateurs` WHERE `ID` LIKE '" + idSource + "'";
Statement stmt = null; Statement stmt = null;
ResultSet rs = null ; ResultSet rs = null ;
try { try {
@ -335,13 +351,110 @@ public class DataBase {
throwables.printStackTrace(); throwables.printStackTrace();
} }
try { try {
if (! rs.getString("Pseudo").equals(null) ){ if (rs.next()){
Pseudo = rs.getString("Pseudo") ; Pseudo = rs.getString("Pseudo") ;
} }
} catch (SQLException throwables) {
throwables.printStackTrace();
}
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) { } catch (SQLException throwables) {
throwables.printStackTrace(); throwables.printStackTrace();
} }
return Pseudo ; 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);
}
} }