Connexion à la base de données

helaba Messages postés 12 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 6 septembre 2013 - 26 mai 2012 à 22:19
 Utilisateur anonyme - 2 juin 2012 à 12:56
j'ai crée une interface graphique de connexion à une base de données Mysql en utilisant eclipse. j'ai accéder a la base mais le problème que je n'arrive pas a vérifier si le champ de saisie par exemple du mot de passe avec celui de la base de donnée. voici la première classe: parametres
public class Parametres {
private String NomUtilisateur;
private String MotDePasse;
private String serveurBD;
private String driverSGBD;
 public Statement statement;
 public Connection laConnection;
 public ResultSet resultSet;
 public ResultSet resultSet2;
 

// CONSTRUCTEUR
public Parametres (){

this.NomUtilisateur = "inconnu";
this.MotDePasse = "inconnu";
}
public Parametres(String log,String pwd){
init(log,pwd);
}
public Parametres(Parametres id){ 
init(id); 
}
public void init(String log, String pwd)
{
this.NomUtilisateur =log;
this.MotDePasse =pwd;
}
public void init(Parametres id){ 
this.NomUtilisateur=id.NomUtilisateur; 
this.MotDePasse=id.MotDePasse; 
} 
public String toString()
{
return("NomUtilisateur :"+NomUtilisateur+", MotDePasse: "+MotDePasse );
}

et la deuxième:
public class authentificationV02 extends JFrame { 
private JLabel bienvenue; 
private JLabel demandeid; 
private JTextField champNomUtilisateur; 
private JTextField champMotDePasse; 
private JButton validation; 
private int statutconnextion;
private JPanel jContentPane ;

public authentificationV02(){ 
super(); 


setTitle ("Authentification"); 
setBounds (100, 200, 200, 400); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
bienvenue = new JLabel ("Bienvenue dans l'interface"); 
demandeid = new JLabel ("Veuillez vous identifier:"); 
champNomUtilisateur = new JTextField ("login :" ); 
champMotDePasse = new JTextField ("mot de passe :"); 
validation = new JButton ("Valider"); 
MyListener myListener = new MyListener(); 
validation.addActionListener(myListener); 
validation.setSize(50,25); 


Container contenu = (Container) getContentPane(); 
    contenu.setLayout (new GridLayout(5,1,5,5)); 
contenu.add(bienvenue); 
contenu.add(demandeid); 
contenu.add(champNomUtilisateur); 
contenu.add(champMotDePasse); 
contenu.add(validation); 

setVisible (true); 
} 
class MyListener implements ActionListener 
{ 
private String testuser; 
private String testmdp; 
private String nom; 
private String nomu; 

public void actionPerformed(ActionEvent event) 
{ 
if((JButton)event.getSource() == validation) 
{ 
Parametres id = new Parametres(); 
id.setNomUtilisateur(champNomUtilisateur.getText()); 
id.setMotDePasse(champMotDePasse.getText()); 
try { 
Class.forName("com.mysql.jdbc.Driver"); 
//String url = "jdbc:mysql://localhost/utilisateur"; 
String login = id.getNomUtilisateur(); 
String passe = id.getMotDePasse(); 
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/utilisateur", "root", ""); 
if(conn != null) JOptionPane.showMessageDialog(null,"Connexion Réussie, Vérification de l'identité..."); 

Statement st = conn.createStatement(); 
String query = "SELECT * FROM users "; 
ResultSet rs = st.executeQuery(query); 

while (rs.next()) { 
/*System.out.println("numéro:" + rs.getInt("num") );
System.out.println(	"login:" + rs.getString("login")); 
System.out.println(	"mdp:" + rs.getString("passe"));
System.out.println(	"nom:" + rs.getString("nom"));
*/

testuser= rs.getString("login");

testmdp = rs.getString("passe"); 
    nomu = rs.getString("nom"); 
    
    

} 
if(testuser.equals("NomUtilisateur") && testmdp.equals("MotDePasse")) 
    	JOptionPane.showMessageDialog(null,"Bonjour monsieur "	+nomu); 
/*Statement st1 = conn.createStatement(); 
String query1 "SELECT nom FROM users WHERE `num` '"+nom+"'"; 
ResultSet rs1 = st1.executeQuery(query1); 

while (rs1.next()) { 
nomutil = rs1.getString("nom"); 
} 
*/

//if(nom.equals(nom)) {
//menu v =new menu(); dispose();} 
 
 
}
catch (Exception e) { 
JOptionPane.showMessageDialog(null,"Exception: " +e.getMessage()); 
} 

}

}

//@Override
/*public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub

}*/

}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new authentificationV02();
}
});

}}

S'il Vous plait aidez moi

5 réponses

Utilisateur anonyme
28 mai 2012 à 23:22
Quel est le problème exactement ? Je ne vois pas où tu veux en venir.


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
helaba Messages postés 12 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 6 septembre 2013 2
29 mai 2012 à 10:38
bonjour,
j'ai pu me connecter à la base de données mais le problème réside dont la vérification du champ saisie par l'utilisateur avec celui de la base;à savoir
champNomUtilisateur avec le nom dans la base.
Merci
0
Utilisateur anonyme
29 mai 2012 à 12:31
En gros si j'ai bien compris tu veux savoir si une valeur saisie correspond à une valeur dans ta base de données, c'est ça ?



while (rs.next()) { 
/*System.out.println("numéro:" + rs.getInt("num") );
System.out.println(	"login:" + rs.getString("login")); 
System.out.println(	"mdp:" + rs.getString("passe"));
System.out.println(	"nom:" + rs.getString("nom"));
*/

testuser= rs.getString("login");

testmdp = rs.getString("passe"); 
    nomu = rs.getString("nom"); 
    
    

} 
if(testuser.equals("NomUtilisateur") && testmdp.equals("MotDePasse")) 
    	JOptionPane.showMessageDialog(null,"Bonjour monsieur "	+nomu); 
/*Statement st1 = conn.createStatement(); 
String query1 "SELECT nom FROM users WHERE `num` '"+nom+"'"; 
ResultSet rs1 = st1.executeQuery(query1); 

while (rs1.next()) { 
nomutil = rs1.getString("nom"); 
} 
*/

//if(nom.equals(nom)) {
//menu v =new menu(); dispose();} 
 
 
}

Ton code ici est assez brouillon, tu as voulu faire quoi exactement ?

Le mieux consisterait récupérer ton nom et ton mot de passe puis à faire une requête SQL avec au lieu de boucler sur tout ta table et de faire des conditions assez bizarres... Explique ce que tu veux et ce que tu as voulu faire avec ton code.


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
helaba Messages postés 12 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 6 septembre 2013 2
29 mai 2012 à 13:20
oui c'est ça exactement ce que je faire; je n'ai pas compris ce que je devrai récupérer le nom saisi ou le nom de la base?
pour la condition
if(testuser.equals("login") && testmdp.equals("passe"));

je veux vérifier si le nom saisi et le mot de passe saisi correspondant a la valeur de la base de données.
Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
2 juin 2012 à 12:56
Bon, je vais tâcher de clarifier tout ça car ça m'étonnerait fortement que ton code soit fonctionnel.

Toi, tu récupères un login et un mot de passe. Jusque là, rien d'anormal. Tu veux donc vérifier si la personne existe. Sauf que là, tu passes par la méthode barbare à souhait. Tu fais un requête select * from users. Donc du coup, tu charges absolument tous les utilisateurs et toutes leurs données à partir de ta base. Imagine un peu que ta base fasse 50 000 lignes et environ 10 colonnes, tu imagines le temps d'exécution de ta requête ? Donc déjà là, ça coince et pas qu'un peu.

Ensuite, tu veux vérifier si tu as bien un compte avec ce login et ce password. Et donc là, tu vas parcourir toutes les lignes que tu viens de choper avec ta requête ! Autant dire que tu te prends 50 000 tours de boucle si ta table fait 50 000 lignes ! Et, pendant que tu parcours tout ça, tu fais à chaque fois une condition, et si je reprends mon exemple, tu te prends 50 000 conditions... En plus, ton if n'est même pas dans ta boucle, donc là tu vas tester ta condition sur la dernière ligne retournée, autant dire ça ne marchera presque jamais.

Donc, voilà comment il faut faire et, crois moi, tu gagneras fortement en complexité et en temps de calculs.

1/ Tu optimises ta requête
2/ Et c'est tout grosso modo

Donc ça ferait un truc du genre :
String reqAuthentification = "select ID from users where login= '" + login+ '" and mot_de_passe= '" + motDePasse+ "'";


Au lieu de sélectionner toutes les colonnes, tu n'en prends que le strict minimum comme un ID par exemple si tu as une colonne comme ça.

Ensuite tu exécutes ta requêtes comme ça par exemple :

ResultSet rs = st.executeQuery( reqAuthentification ); 


Et si tu as une valeur retournée, tu affiches ta pop-up.

if ( rs != null && rs.size() > 0 )
     JOptionPane.showMessageDialog(null,"Bonjour monsieur "	+nomu);


Par contre, revois l'API de ResultSet et aussi pour executeQuery pour optimiser ce if car je ne sais plus quelle est la méthode de resultset pour voir s'il y a des lignes dedans.

Est-ce que c'est plus clair ? N'hésite pas à poser des questions...


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
Rejoignez-nous