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 :

Je n'arrive pas à parcourir un ResultSet


Sujet :

JDBC Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Je n'arrive pas à parcourir un ResultSet
    Bonjour,

    Je développe en java une base de données mysql qui stocke des personnes. J'ai une méthode pour rechercher toutes les personnes de la table par rapport à leur nom.
    Mais le problème c'est que je n'arrive pas à récupérer les valeurs du ResultSet alors qu'il n'est pas vide.
    Code Java : 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
     
    public static ArrayList<Personne> findByName(String n) throws SQLException {
     
    		String SQLPrep = "SELECT nom, prenom FROM personne WHERE nom = ?;";
    		PreparedStatement prep1 = DBconnection.getConnect().prepareStatement(SQLPrep);
    		prep1.setString(1, n);
    		prep1.execute();
    		ResultSet rs = prep1.getResultSet();
    		ArrayList<Personne> list = new ArrayList<Personne>();
    		// s'il y a un resultat
    		if (rs.next()) {
    			while (rs.next()) {
    				String nom = rs.getString("nom");
    				String prenom = rs.getString("prenom");
    				Personne p = new Personne(nom, prenom);
    				list.add(p);
    			}
    		}
    		return list;
    	}

    Ici le programme passe bien le vérification du if(rs.next()) mais ne rentre pas dans la boucle et je ne vois pas d'où ça peut venir.

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    La méthode next() avance vers le prochain enregistrement s'il existe et retourne true dans ce cas, ou false s'il n'y a plus d'enregistrement dans le ResultSet.

    Quand tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (rs.next()) {
    			while (rs.next()) {
    On avance une première fois avec le rs.next() du if, puis une deuxième fois avec le rs.next() du while : s'il n'y a qu'un enregistrement dans le ResultSet, on n'entre pas dans le while forcément.

    Soit tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (rs.next()) {
            do {
                    // lecture des données de l'enregistrement
    	}	while (rs.next());
    soit tout simplement, sans if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (rs.next()) {
                    // lecture des données de l'enregistrement
    }
    D'ailleurs plutôt que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    prep1.execute();
    		ResultSet rs = prep1.getResultSet();
    autant faire directement :
    [CODE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ResultSet rs  = prep1.executeQuery();
       /* tout le reste */
     
    }
    Par ailleurs, il faut que tu penses à libérer tes ressources (Statement, ResultSet et Connection éventuellement). Avec un try-with-resources ça se fait facilement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ArrayList<Personne> list = new ArrayList<>();
     
    // ici on ne ferme que statement et resultset (pas la connexion)
    try(PreparedStatement prep1 = DBconnection.getConnect().prepareStatement(SQLPrep)) {
        prep1.setString(1, n);
        ResultSet rs = prep1.executeQuery();
        while( rs.hasNext() )  {
             /* ... */
       }
    }
    return list;

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Ok j'ai retiré le if et ça fonctionne.
    J'avais déjà essayé de le retirer mais j'ai dû m'embrouiller dans mes affichages console car j'avais cru que le problème était toujours là.

    J'avais aussi essayé de changer le if(rs.next()) en if(!rs.first()) mais je suppose que le problème reste le même vu que le rs.first() me met sur la première ligne du résultat.

    En tout cas merci de ton aide je passe en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Je n'arrive pas à parcourir le JSON
    Par geeka dans le forum Général Python
    Réponses: 8
    Dernier message: 25/08/2016, 21h18
  2. Je n'arrive pas à parcourir mon tableau $_POST
    Par beegees dans le forum Langage
    Réponses: 7
    Dernier message: 22/03/2009, 11h59
  3. j'arrive pas à parcourir un resultset avec while
    Par une_tite_question dans le forum JDBC
    Réponses: 11
    Dernier message: 12/06/2008, 16h53
  4. scrollbar qui dans les navigateurs n'arrive pas à faire parcourir toute la page
    Par katlinea dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 30/07/2007, 10h02
  5. j'arrive pas a arreter mon thread d'arriere-plan
    Par ms91fr dans le forum Langage
    Réponses: 6
    Dernier message: 06/06/2003, 21h36

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