Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > JDBC
JDBC Forum d'entraide sur l'API JDBC (Java Database Connectivity) et l'accès aux bases de données. Avant de poster -> FAQ JDBC
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 02/12/2012, 14h29   #1
popy67
Membre du Club
 
Homme
Inscription : janvier 2008
Messages : 284
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28

Informations forums :
Inscription : janvier 2008
Messages : 284
Points : 66
Points : 66
Par défaut Requête qui n'affiche pas de résultats

Bonjour,

Je souhaite créer un programme qui après saisie du pseudo se connecte à la base de données pour :
1 - Vérifier que le membre est bien enregistré
2 - Afficher les résultats de la requête

La fenetre comporte 1 TextField pour saisir le pseudo, 1 bouton valider.

Le code que j'ai écrit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  private void validerActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        String id = identifiant.getText();
 
        if(id.equals(""))
        {
            JOptionPane.showMessageDialog(null, "Vous devez saisir un identifiant valide dans le champ prévu à cet effet", "Identifiant inconnu", JOptionPane.ERROR_MESSAGE);
        }
        else
        {
            try 
            { 
            Class.forName("com.mysql.jdbc.Driver");
            Connection connec = DriverManager.getConnection("jdbc:mysql://localhost/jerale", "root", "");
 
            String commande = "SELECT * FROM membre WHERE pseudo = '" + id + "'";
            System.out.println(commande);
            Statement stmt = connec.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            ResultSet res = stmt.executeQuery(commande);
 
            System.out.println("Nous sommes avant la boucle");
 
            while(res.next())
            {
                System.out.println("Nous sommes dans la boucle");
                String pseudo = res.getString(2);
                System.out.println(pseudo);
            }
 
            }
            catch (SQLException ex)
            {
            System.out.println("Erreur SQL");
            } 
            catch (ClassNotFoundException ex)
            {
            System.out.println("ClassNotFoundException");
            }
 
        }
 
 
    }
System.out.println(commande); renvoie bien la requete SQL correcte.
System.out.println("Nous sommes avant la boucle"); s'affiche bien dans la console.

En revanche la boucle While ne renvoie aucun resultat.
Aucune erreur n'est renvoyée.


Que se passe t-il ?
__________________
Réalisations : Jeu de gestion d'hypermarché virtuel
popy67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2012, 15h33   #2
popy67
Membre du Club
 
Homme
Inscription : janvier 2008
Messages : 284
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28

Informations forums :
Inscription : janvier 2008
Messages : 284
Points : 66
Points : 66
Petite rectification par rapport à mon autre post, le code ci-dessous fonctionne bien lorsque le pseudo que l'on saisit existe en base de données, en revanche s'il est inexistant le script ne fait rien, comment faire pour qu'un message soit malgré tout affiché ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class VerifierPseudo 
{
    public VerifierPseudo(String id)
    {
        try 
            { 
            Class.forName("com.mysql.jdbc.Driver");
            Connection connec = DriverManager.getConnection("jdbc:mysql://localhost/jerale", "root", "");
 
            String commande = "SELECT * FROM membre WHERE pseudo = '" + id + "'";
 
            Statement stmt = connec.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            ResultSet res = stmt.executeQuery(commande);
 
           System.out.println(res);
 
            while(res.next())
            {        
                System.out.println("Nous sommes dans la boucle" + res);
                String pseudo = res.getString(2);
                System.out.println(pseudo);   
            }
 
            }
            catch (SQLException ex)
            {
            System.out.println("Erreur SQL");
            } 
            catch (ClassNotFoundException ex)
            {
            System.out.println("ClassNotFoundException");
            }
    }  
}
__________________
Réalisations : Jeu de gestion d'hypermarché virtuel
popy67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 09h55   #3
esired
Membre du Club
 
Homme
Inscription : juillet 2012
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Bénin

Informations forums :
Inscription : juillet 2012
Messages : 35
Points : 59
Points : 59
Bonjour.
Pour régler votre problème, il suffit de compter le nombre de lignes présentes dans le ResultSet avant d'afficher un message à l'utilisateur. Si le nombre de ligne est égal à 0, il n'y a pas d'utilisateur trouvé. Dans le cas contraire, un utilisateur a été trouvé. La lecture de ceci vous aidera :
http://java.developpez.com/faq/jdbc/...ltset#rowColRS
esired est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/12/2012, 16h26   #4
popy67
Membre du Club
 
Homme
Inscription : janvier 2008
Messages : 284
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28

Informations forums :
Inscription : janvier 2008
Messages : 284
Points : 66
Points : 66
Citation:
Envoyé par esired Voir le message
Bonjour.
Pour régler votre problème, il suffit de compter le nombre de lignes présentes dans le ResultSet avant d'afficher un message à l'utilisateur. Si le nombre de ligne est égal à 0, il n'y a pas d'utilisateur trouvé. Dans le cas contraire, un utilisateur a été trouvé. La lecture de ceci vous aidera :
http://java.developpez.com/faq/jdbc/...ltset#rowColRS
Bonjour,

Merci pour votre réponse.
Le code fonctionne bien "en partie", il me renvoie bien 1 ou 0 en fonction du nombre de lignes enregistrées mais lorsque je teste l'egalité avec un if / else le code ne marche pas, apparemment ca serait un problème dans le test d'égalité...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 Statement stmt = connec.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            ResultSet res = stmt.executeQuery(commande);
 
            res.last();
            int nbLignes = res.getRow();
            System.out.println(nbLignes);
            res.first();
 
 
 
            if(nbLignes == 0)
            {
                System.out.println("Votre requete ne renvoie aucun resultat");
            }
            else
            {
                while(res.next())
                {
                 String pseudo = res.getString(2);
                 String mail = res.getString(4);
 
                 InformationsMembre inf = new InformationsMembre(pseudo, mail);
                 inf.setVisible(true);
              }   
            }
__________________
Réalisations : Jeu de gestion d'hypermarché virtuel
popy67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 21h17   #5
esired
Membre du Club
 
Homme
Inscription : juillet 2012
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Bénin

Informations forums :
Inscription : juillet 2012
Messages : 35
Points : 59
Points : 59
Bonsoir.
Le problème vient vient du fait que vous faites une lecture de trop du ResultSet.
Quand vous faites

vous placez le curseur du resultset le premier enregistrement. Donc
quand vous faites ensuite

Code :
1
2
3
 
while (rs.next()) {
}
vous faites avancer le curseur du resultset sur l'enrgistrement suivant. Et comme il n'y a qu'une seule ligne ligne dans le resultset, la methode renvoie et le corps de la boucle n'est pas exécuté.

Ceci devrait donc fonctionner :
Code :
1
2
3
4
5
6
7
8
9
10
 
...              
int nbLigne = rs.getRow();
rs.first();
if(nbLignes == 0)
    System.out.println("Votre requete ne renvoie aucun resultat");
}
else {
    // afficher les infos  
}
Dernière chose. Je vous conseille d'utiliser des PreparedStatement pour les requêtes qui doivent prendre des paramètres. Cela vous assure que les caractères spéciaux sont correctement échappés.
esired est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h34.


 
 
 
 
Partenaires

Hébergement Web