Compare commits

...

3 commits

Author SHA1 Message Date
dd08bd4fb2 DB prete (ajout fonctions potentielle dans futur proche) 2020-12-21 18:02:29 +04:00
ad27139ee2 Singleton DB 2020-12-19 17:56:17 +01:00
8791c73d38 Debut database 2020-12-16 12:10:28 +01:00
17 changed files with 240 additions and 7 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -15,6 +15,8 @@ import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import src.Model.DataBase;
import src.Protocoles.*;
/**
@ -22,7 +24,6 @@ import src.Protocoles.*;
* Classe recapitulant toutes les actions possibles pour un utilisateur
* </p>
*/
public class ChatApp {
/* Liste des utilisateurs actifs */
@ -198,11 +199,9 @@ public class ChatApp {
}
public static void main (String[] args) throws IOException {
ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ;
System.out.println("Creation DB");
DataBase Db = DataBase.getInstance();
/*ChatApp app = new ChatApp(args[0],Integer.parseInt(args[1])) ;
ExecutorService execUDP = Executors.newFixedThreadPool(1000);
execUDP.submit(new RunnerEcouteUDP(app));
try {
@ -222,7 +221,7 @@ public class ChatApp {
app.getHist("Doudou").afficher10derniers();
System.out.println("Tentative de connexion avec Doudou");
TCPEchange.demarrerSession(app, app.actifUsers.getPseudoList("Doudou"));
}
}*/

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,234 @@
package src.Model;
import java.io.IOException;
import java.sql.*;
import java.util.Date;
import java.sql.DriverManager;
public class DataBase {
private String DBurl = "jdbc:mysql://srv-bdens.insa-toulouse.fr:3306" ;
private Connection connection = null;
private String login = "tp_servlet_006";
private String pswd = "baePh9ei";
/*Format de la table
+--------+-------------+---------+---------------------+
| ID | Pseudo | Actif | Date d'inscription |
+--------+-------------+---------+---------------------+
Id correspond à l'addresse IP
Pseudo : Dernier Pseudo utilisé pour cette adresse IP, va etre remplacé par le pseudo actuel avec majPseudo
Date d'inscription comme son nom l'indique le jour de l'inscription de cette utilisateur
Actif est un boolean indicant si l'utilisateur est actif
Chaque communication entres utilisateurs sera stocké dans une table de la forme
+------------------+-----------+---------------+---------------+
| Destinataire | Source | Message | Date d'envoi |
+--------+---------------------+---------------+---------------+
Destinataire -> Id du destinataire du message
Source -> Id de celui qui envoie le message
Message -> Msg envoye
Date d'envoie -> Date a laquelle Source a envoye le message a destinataire
*/
private static DataBase instance = null; // Singleton
public DataBase() {
try {
// 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: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) {
e.printStackTrace();
System.out.println("Echec d'etablissement de la connexion");
}
}
public static DataBase getInstance() {
synchronized (DataBase.class) {
DataBase DB = instance;
if (DB == null) {
DB = new DataBase();
}
return DB;
}
}
/*
* 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
*/
public void CreationTableHistorique(String ID1 , String ID2) {
// Pour eviter d'avoir les tables en double
String petit;
String grand;
int comparaison = ID1.compareTo(ID2);
if (comparaison < 0) {
petit = ID1;
grand = ID2 ;
}
else {
petit = ID2;
grand = ID1 ;
}
String nomTable = "Chat_" + petit + "_" + grand ;
String Requete = "CREATE TABLE IF NOT EXISTS`" + nomTable +"` (\n" + "`Destinataire` varchar(100) NOT NULL,\n" + " `Source` varchar(100) NOT NULL,\n" + " `Envoi` timestamp NOT NULL,\n" + " `Message` text NOT NULL\n" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;";
System.out.println(Requete);
PreparedStatement Ps = null ;
//Statement est utilisé pour envoyer une requete SQL à la base de donnee
try {
Ps = connection.prepareStatement(Requete);
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();
} catch (SQLException e) {
e.printStackTrace();
System.out.println(" Echec executeUpdate ");
}
}
/*
* 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
*/
public void majPseudo( String ID , String Pseudo) {
String requete= "UPDATE `Utilisateurs` SET `Pseudo`=? WHERE id=?";
PreparedStatement Ps = null ;
//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);
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();
} catch (SQLException e) {
e.printStackTrace();
System.out.println(" Echec executeUpdate ");
}
}
/*
* 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
* @param Msg Message envoye entre les deux utilisateurs
*/
public void ajoutHistorique(String IDdest , String IDsrc, String Msg) {
String petit;
String grand;
int comparaison = IDdest.compareTo(IDsrc);
if (comparaison < 0) {
petit = IDdest;
grand = IDsrc ;
}
else {
petit = IDsrc;
grand = IDdest ;
}
String nomTable = "Chat_" + petit + "_" + grand ;
String requete= "INSERT INTO `"+ nomTable +"`(`Destinataire`, `Source`, `Message`) VALUES ( ? , ? , ?)";
PreparedStatement Ps = null ;
//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);
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();
} catch (SQLException e) {
e.printStackTrace();
System.out.println(" Echec executeUpdate ");
}
}
/*
* 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 se connecter pour la premiere fois
* @param Pseudo pseudo actuelle de l'utilisateur
*/
public void ajoutUtilisateurs(String ID , String 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);
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();
} catch (SQLException e) {
e.printStackTrace();
System.out.println(" Echec executeUpdate ");
}
}
/*
* 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
*/
public void majUtilisateursActifs(Boolean Connecte, String Id) {
String requete= "UPDATE `Utilisateurs` SET `Actif`=? WHERE id=?";
PreparedStatement Ps = null ;
Integer Actif = Connecte ? 1 : 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);
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();
} catch (SQLException e) {
e.printStackTrace();
System.out.println(" Echec executeUpdate ");
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.