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 :

[débutant]Récupérer le résultat d'une requête dans ArrayList


Sujet :

JDBC Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Points : 36
    Points
    36
    Par défaut [débutant]Récupérer le résultat d'une requête dans ArrayList
    Bonjour

    J'essaye d'exécuter une requête qui me renvoi une liste de noms (des OS pour être précis), j'aimerais les récupérer dans une ArrayList pour ensuite les mettre dans une Jcombobox pour le moment

    La requête ne me renvoi qu'une valeur, hors le résultat devrait être "Windows" ; "Linux" ; "Test", j'ai surement fais une erreur toute bête mais j'avoue ne pas l'a trouver

    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
        public ArrayList Combo(String query)
        {
            ArrayList Array = new ArrayList();
            try
            {
                rs = sta.executeQuery(query);
                rs.last();
                int nbRow = rs.getRow();
                rs.beforefirst();
                int i = 0;
                while (rs.next())
                {
                    i++;
                    Array.add(rs.getString(i));
                    System.out.println(rs.getString(i));//j'affiche pour vérifier
                    rs.next();
                }
            }
            catch (SQLException queryE)
            {
                System.out.println("Erreur de requête : " + queryE);
            }
            return Array;
        }
    Je suis encore assez débutant en JAVA, donc si vous avez des avis sur ma façon de faire, n'hésitez pas je me doute que c'est pas au point

    Merci d'avance

  2. #2
    Membre actif Avatar de snoop
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2003
    Messages : 354
    Points : 294
    Points
    294
    Par défaut
    Pas besoin de refaire un rs.next() puisqu'il est effectué dans le while :
    El il faut fair eune boucle dans le while pour récupérer toutes les colonnes... Regardes avec les ResultSetMetadata pour récupérer les noms des colonnes et ensuite effectuer un getString("nomColonne") ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            while (rs.next())
                {
                  //  i++;
                    Array.add(rs.getString(i));
                    System.out.println(rs.getString(i));//j'affiche pour vérifier
                }
    Snoop

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Points : 348
    Points
    348
    Par défaut
    Pourquoi tu utilises une variable nbRow ? Tu ne la réutilises pas par la suite?
    Fais voir la requête.
    C'est quelle valeur qu'il renvoit?

    Pour le code je ferai comme ça :

    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
     
    public ArrayList Combo(String query) 
        { 
            ArrayList Array = new ArrayList(); 
            try 
            { 
                rs = sta.executeQuery(query); 
                rs.beforefirst(); 
                int i = 0; 
                while (rs.next()) 
                { 
                    i++; 
                    Array.add(rs.getString(i)); 
                    System.out.println(rs.getString(i));//j'affiche pour vérifier 
                } 
            } 
            catch (SQLException queryE) 
            { 
                System.out.println("Erreur de requête : " + queryE); 
            } 
            return Array; 
        }
    --Miss Gaëlle--

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 76
    Points : 83
    Points
    83
    Par défaut
    Je pense que ta query marche au niveau base.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     rs.last();
     int nbRow = rs.getRow();
     rs.beforefirst();
    Ca, ca ne sert a rien, tu peux y supprimer de ton programme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int i = 0;
    while (rs.next())
    {
                    i++;
                    Array.add(rs.getString(i));
                    System.out.println(rs.getString(i));//j'affiche pour vérifier
                    rs.next();
    }
    Ton rs.getString(i) n'est pas bon . Le i indique le numéro de colonne du résultat de ta requete.
    Or, je suppose ke ta requete ramène une colonne, donc tu dois mettre rs.getString(1) et ton indice i ne sert à rien ici.

    Voili voilou
    Bon courage pour la suite


    [/quote]

  5. #5
    Membre expérimenté
    Avatar de fabszn
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2002
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2002
    Messages : 974
    Points : 1 638
    Points
    1 638
    Par défaut
    Hello,

    En fait le probleme vient de ce que j'ai mis en gras :


    ArrayList Array = new ArrayList();
    try
    {
    rs = sta.executeQuery(query);
    rs.beforefirst();
    int i = 0;
    while (rs.next())
    {
    i++;
    Array.add(rs.getString(i));
    System.out.println(rs.getString(i));//j'affiche pour vérifier
    }
    }
    catch (SQLException queryE)
    {
    System.out.println("Erreur de requête : " + queryE);
    }
    return Array;
    En fait, à chaque rs.next() tu es positionné sur une occurence ramenée par ta requete.
    Lorsque tu fais rs.getString(i), tu selectionnes une colonne sur l'occurence courante.
    J'imagine que ta requete ne ramene qu'un seul champ.
    Lors de ta premiere boucle, i est egale à 1 donc pas de probleme... mais pour les tours suivant, i prend des valeurs qui ne correspondent à aucun champs ramené par ta requete.

    Dans ton code il faudrait que tu remplaces i par 1, ou que tu initialises i à 1 sans l'incrementer.

    J'espere que cela t'aidera , si tu as des questions n'hesite pas!
    @+

    Fabszn
    Twitter : @fsznajderman

    N'oubliez pas le bouton
    Comment bien poser ses questions sur le forum


  6. #6
    Membre régulier Avatar de venegan
    Inscrit en
    Mars 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 72
    Points : 70
    Points
    70
    Par défaut
    le getString s'utilise comme ceci :


    rs.getString("NOM DE COLONNE DE LA REQUETE") ou
    rs.getString("NUMERO DE COLONNE")

    et non pas numero de l'enregistrement

    le rs.next() suffit a incrementer ton parcours

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 42
    Points : 36
    Points
    36
    Par défaut
    Ah oui effectivement c'était tout con, donc merci à tous, j'aurais pus mettre longtemps à trouver tout seul

    Pour le bout de code inutile, c'était parce que j'étais parti sur un for pour le compteur

    En tout cas merci bien !

  8. #8
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Salut,

    Juste une petite remarque un peu hors sujet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public ArrayList Combo(String query)
    C'est dommage de retourner un ArrayList. Il vaut mieux déclarer que ta méthode retourne une interface Collection, voire une List si l'ordre est important.
    Ca te permettra de changer l'implémention de ta liste si jamais tu en as besoin sans avoir à modifier le code dans les méthodes qui utilisent Combo().

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

Discussions similaires

  1. [MySQL] Récupérer le résultat d'une requête dans un tableau
    Par Z20500 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/11/2008, 18h30
  2. Réponses: 2
    Dernier message: 23/01/2008, 08h36
  3. [MySQL] Comment récupérer le résultat d'une requête dans PHP
    Par zouzino dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/11/2007, 22h53
  4. [MySQL] Récupérer le résultat d'une requête dans une variable
    Par kryogen dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 22/10/2007, 14h29
  5. [MySQL] récupérer le résultat d'une requête dans un tableau
    Par faty2 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/05/2007, 16h22

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