IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Requête qui n'affiche pas de résultats


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 306
    Points : 106
    Points
    106
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 306
    Points : 106
    Points
    106
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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");
                }
        }  
    }

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    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

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 306
    Points : 106
    Points
    106
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
                  }   
                }

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Une requète qui ne donne pas le résultat attendu
    Par JeanNoel53 dans le forum Firebird
    Réponses: 1
    Dernier message: 17/12/2013, 10h23
  2. [AC-2007] Requête qui ne donne pas de résultats
    Par sami0701 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 07/11/2013, 22h50
  3. Une requête qui ne donne pas le résultat attendu
    Par JeanNoel53 dans le forum Visual C++
    Réponses: 4
    Dernier message: 30/10/2013, 11h35
  4. [PDO] Une requête qui ne retourne pas de résultat
    Par beegees dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 25/11/2011, 18h18
  5. Requête qui n'affiche pas les participants.
    Par fourniey dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/03/2011, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo