Interface graphique en java
Résolu
fafall
Messages postés
9
Statut
Membre
-
js95 Messages postés 804 Statut Membre -
js95 Messages postés 804 Statut Membre -
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);
}
}
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);
}
}
A voir également:
- Interface graphique en java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Changer carte graphique - Guide
- Eclipse java - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
3 réponses
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...
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...
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
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
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.
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 ;-)
Le problème peut très bien se trouver dans le code de la classe Menu, on ne sait pas.