Interface graphique en java [Résolu/Fermé]

Signaler
Messages postés
8
Date d'inscription
lundi 29 octobre 2012
Statut
Membre
Dernière intervention
12 juillet 2013
-
Messages postés
769
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
-
Bonjour,


je veux utilisé les interface graphique et je veux me connecter avec ma base de donnée mais en compilant ma fenêtre je n'obtiens rien comme message.
Pourriez vous m'aider s'il vous plait?

public static Connection initConnection () {
Connection MaConnection= null;
String url = "jdbc:mysql://localhost:3306/ci_ugb";
try{
//Le chargement du pilote
Class.forName("org.gjt.mm.mysql.Driver");
}catch (Exception e) {
System.out.println("Impossible décharger le pilote jdbc");
}
try{
//L'établissement de la connexion
MaConnection = (Connection) DriverManager.getConnection(url,"fatou","admin");
}
catch (SQLException se) {
System.out.println("Connexion Impossible");
}
return MaConnection;
}


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

if (e.getSource()== valider){
String s1 = jTextField.getText();
String s2 = jPasswordField.getText();
if ((s1!="") && (s2!="")){
Connection maCo = initConnection();
if (maCo == null) return;
String req = "Select * from users";
try{
Statement st = maCo.createStatement();
ResultSet rs = st.executeQuery(req);
while (rs.next()){
if((rs.getString("login").equals(s1)) &&
(rs.getString("password").equals(s2))){
this.dispose();
JFrame fen = new Menu() ;
fen.setVisible(true) ;
}
else
System.out.println("Erreur Login : Login ou mot de passe non valide.");
}
rs.close(); st.close(); maCo.close();
}
catch (SQLException se) {
System.out.println("connexion impossible");
}
}
else
JOptionPane.showMessageDialog(null, "il faut Remplire les chanps vides");
}else
if (e.getSource()== jButton){
this.dispose();
System.exit(0);
}
}

3 réponses

Messages postés
769
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
295
Bonjour,
plusieurs remarques :
-> Les classes java, les composants swing en particulier, commencent par une majuscule,
jTextField => JTextField
jButton => JButton
jPasswordField => JPasswordField
Ces composants sont sans doute des variables dans ton code, mais elles ne sont pas déclarées dans l'extrait de code que tu fournis.

-> s1 != ""
Non, ici on veut comparer une chaîne à la chaîne vide, mais java va comparer les emplacements mémoire de "" et de s1, ce qui n'est pas ce qu'on veut. Utilise plutôt
!s1.isEmpty()
Pareil pour s2.


-> JFrame fen = new Menu();
NetBeans dit que les types Menu et JFrame sont incompatibles.
Ton problème vient très probablement de là.

-> Il serait bien de donner une taille minimale à la fenêtre (JFrame) ou d'appeler la méthode pack() avant de l'afficher.

-> Si tu pouvais préciser dans quelle classe tu as mis la méthode actionPerformed ci-dessus et la classe des objets non référencés (valider, etc.) dans le code ci-dessus cela pourrait nous aider à t'aider.

-> Remarque d'optimisation concernant la requête :
c'est très coûteux d'extraire toute la table pour un seul utilisateur. J'aurais plutôt fait un
SELECT password FROM users WHERE login=''
en mettant le login dans la requête entre les deux '. Après il n'y a plus qu'à vérifier que le mot de passe est bon pour autoriser la connexion.
Mais attention, dans ce cas il faut faire une requête préparée pour éviter le risque d'injection SQL. Je te l'explique dans un second post si j'arrive à remettre la main sur un code similaire...
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

Messages postés
769
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
295
Voici ce que donnerait la méthode actionPerformed :

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == valider) {
            String s1 = jTextField.getText();
            String s2 = jPasswordField.getText();
            if ((!s1.isEmpty()) && (!s2.isEmpty())) {
                Connection maCo = initConnection();
                if (maCo == null) {
                    return;
                }
                String req = "SELECT password FROM users WHERE login=?";
                 /* Le point d'interrogation remplace la donnée sensible qui sera controlée avant l'insertion dans la requête, on fait donc une requête "à trous" */
/* A EVITER ABSOLUMENT :
     String req = "SELECT password FROM users WHERE login='".s1."'";
car là il y a risque d'injection SQL, si l'utilsateur entre du code sql après une apostrophe, il peut faire ce qu'il veut avec la base de données */

                try {
                    PreparedStatement st = (PreparedStatement) maCo.prepareStatement(req);
                    st.setString(1, s1);
/* on remplace le premier trou (d'où le 1, ici il n'y a qu'un seul trou) par la chaîne s1, la méthode setString indique au SGBD qu'il s'agit d'un VARCHAR, la chaîne s1 est donc insérée correctement dans la requête et aucun code SQL éventuellement saisi par l'utilisateur ne pourra être interprété par le SGBD */
                   
                    ResultSet rs =  st.executeQuery();
                    
                    if (rs.next()){ // il n'y a qu'un resultat à analyser
                        if( rs.getString("password").equals(s2) ){
                            // on autorise la connexion
                            this.dispose(); // appelé sur la fenêtre courante (de login je suppose)
                            JFrame fen = new JFrame("Connexion établie"); // exemple de fenêtre
                            fen.getContentPane().add(new JLabel("Connexion établie avec succès !"));
                            fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                            fen.pack();
                            fen.setVisible(true);
                        }else{ // on refuse
                            System.out.println("Mot de passe invalide");
                        }
                    } else { // on refuse : pas de résultat, le login n'a pas été trouvé dans la BDD
                            System.out.println("Login invalide");
                    }
                    rs.close();
                    st.close();
                    maCo.close();
                } catch (SQLException se) {
                    System.out.println("connexion impossible");
                }
            } else {
                JOptionPane.showMessageDialog(null, "il faut remplir les champs vides");
            }
        } else if (e.getSource() == jButton) {
            this.dispose();
            System.exit(0);
        }
    }

J'ai commenté le code pour expliquer.
Messages postés
16039
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
22 septembre 2020
2 678
"JFrame fen = new Menu();
NetBeans dit que les types Menu et JFrame sont incompatibles.
Ton problème vient très probablement de là."


Comment peux tu savoir que Menu est de type incompatible alors que tu n'as pas la déclaration de la classe Menu ? Il s'agit surement d'une classe Menu extends JFrame, dans ce cas un tel message ne serait pas affiché.

Sinon, rien à redire ;-)
Messages postés
769
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
295
En effet, mais sans le code on ne peut pas savoir.
Le problème peut très bien se trouver dans le code de la classe Menu, on ne sait pas.
Messages postés
8
Date d'inscription
lundi 29 octobre 2012
Statut
Membre
Dernière intervention
12 juillet 2013

Merci beaucoup j'ai pu retrouvé mes erreurs grâce à vous. Merci encore une fois.

Cordialement
Messages postés
8
Date d'inscription
lundi 29 octobre 2012
Statut
Membre
Dernière intervention
12 juillet 2013

S'il vous plait j'avais installer EclipseVE pour ma modélisation en UML mais actuellement je peux plus accéder à mes diagrammes et il m'affiche se message quand j'essaye de l'ouvrir il m'ecrit ce message.

The diagram has been corrupted for unknown reasons. Please select your diagram in the package explorer, open the popup menu and select replace With >Loval History.... in order to restore your previous diagram.

Merci d'avance
Messages postés
769
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
29 juillet 2014
295
Personnellement j'utilise Dia pour les diagrammes et je ne savais pas qu'il était possible de les faire dans Eclipse. Je ne peux malheureusement pas t'aider sur cette question.