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 :

Lecture d'un ResultSet : j'affiche en console un tableau vide


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Par défaut Lecture d'un ResultSet : j'affiche en console un tableau vide
    Bonsoir,

    Je programme avec java et composants swing
    Mon problème c'est que je n'arrive pas a remplir mon tableau à l'affichage.
    J'essaye d'afficher mes données contenues dans ma BD dans un tableau.
    Ma BD est issue de pgAdminIII

    Pourtant ma BD est connectée est testée.

    Voila mon code :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     public contenu findTable(int id) {
             try 
                     ( //Création d'un objet Statement
                         Statement state = connect.createStatement()) {
                     //L'objet ResultSet contient le résultat de la requête SQL
     
                     ResultSet result = state.executeQuery("SELECT * FROM contenu ORDER BY id");
                     //On récupère les MetaData
                     ResultSetMetaData resultMeta = result.getMetaData();
     
                     //System.out.println("\n**********************************");//imprime l'encadrement//utilisé pour tester
                     //On affiche le nom des colonnes 
                     for(int i = 1; i <= resultMeta.getColumnCount(); i++) {
                        // System.out.print("\t" + resultMeta.getColumnName(i).toUpperCase() + "\t|");
                     }
     
                     //System.out.println("\n**********************************");//imprime l'encadrement//utilisé pour tester
     
                     //je récupère les données de la requête et affichage
                     while(result.next()){
                             for(int i = 1; i <= resultMeta.getColumnCount(); i++) {
                           //  System.out.print("\t" + result.getObject(i).toString() + "|");//utilisé pour tester
                         }
     
                        // System.out.println("\n---------------------------------");//imprime les lignes//utilisé pour tester
     
                     }
                    int i=0;
                    int k=0;
                    if(result.next()){
                        result.last();
                        k=result.getRow();
                        result.beforeFirst();
                    }
     
                    Object[][] t=new Object[k][7];
                   //on met le resultat de la requete dans un tableau
                    while (result.next()){
     
                       t[i][0]=result.getInt(1);
                       t[i][1]=result.getString(2);
                       t[i][2]=result.getString(3);
                       t[i][3]=result.getString(4);
                       t[i][4]=result.getInt(5);
                       t[i][5]=result.getString(6);
                       t[i][6]=result.getDate(7);
                        i++;
                    }
                     System.out.println(Arrays.toString(t)); //essai affichage du tableau (j'obtiens qu'une paire de crochet, tableau vide!!!
     
                        result.close();
                        state.close();
                 }
     
                catch (SQLException e)
                  {
                  }
            return contenu;
             }
     
     
    }
    Les lignes en commentaires de System.out.println(); fonctionnent quand à elles mais pas la commande qui suit:

    System.out.println(Arrays.toString(t)); //essai affichage du tableau (j'obtiens qu'une paire de crochet, mon tableau est vide!!!

    Merci pour votre aide.

    a +++ rapidego

  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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le problème est qu'avec la boucle ci-dessous, tu vas jusqu'au bout du ResultSet sans rien en faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //je récupère les données de la requête et affichage
    while(result.next()){
                             for(int i = 1; i <= resultMeta.getColumnCount(); i++) {
                           //  System.out.print("\t" + result.getObject(i).toString() + "|");//utilisé pour tester
                         }
     
                        // System.out.println("\n---------------------------------");//imprime les lignes//utilisé pour tester
     
    }
    Du coup, dans la suite du code, result.next() est toujours faux, puisqu'on est arrivé à la fin avec la boucle. Commente ou supprime cette boucle qui ne sert à rien.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Par défaut Tableau toujours vide
    Bonsoir,
    Merci de m'avoir répondu.

    Si je met cette boucle en commentaire j'obtiens une dizaine d'erreurs dans mon code.
    L'objet ResultSet result n'est plus reconnu.

    La boucle désignée me sert à afficher mes données en console et ça marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(result.next()){
                         for(int i = 1; i <= resultMeta.getColumnCount(); i++) {
                               System.out.print("\t" + result.getObject(i).toString() + "|");//utilisé pour tester en console
                         }
    Mais j'aimerai placer mes données dans un tableau et l'afficher pour l'instant également en console.
    Comme dit si je l'annule la boucle, dans le reste du code il ne reconnait plus result

    Cordialement à +++
    rapidego

  4. #4
    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
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Rapidego Voir le message

    Si je met cette boucle en commentaire j'obtiens une dizaine d'erreurs dans mon code.
    Tu as dû commenter qu'un bout du code de la boucle, en oubliant une accolade probablement. Donc, forcément, y'a plus rien qui compile. Mais enlever cette boucle n'a aucune raison d'empêcher de compiler le reste.

    Citation Envoyé par Rapidego Voir le message
    L'objet ResultSet result n'est plus reconnu.
    C'est cette ligne qui déclare result : ResultSet result = state.executeQuery("SELECT * FROM contenu ORDER BY id");Rien à voir avec la boucle.

    Citation Envoyé par Rapidego Voir le message
    La boucle désignée me sert à afficher mes données en console et ça marche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(result.next()){
                         for(int i = 1; i <= resultMeta.getColumnCount(); i++) {
                               System.out.print("\t" + result.getObject(i).toString() + "|");//utilisé pour tester en console
                         }
    Justement dans le code ci-dessus il manque une accolade fermante pour compléter le while. Si tu commentes le code ci-dessus sans cette accolade, tout est décalé et le compilateur ne parvient plus à découper correctement les scopes et forcément il va signaler plein d'erreurs là où il n'y en a pas parce qu'il ne s'y retrouve plus.

    [QUOTE=Rapidego;11250328]
    Mais j'aimerai placer mes données dans un tableau et l'afficher pour l'instant également en console.
    |/quote]
    Je te l'ai dit si tu lis jusqu'au bout un ResultSet avec un while ( result.next() ) { }, tu ne peux plus refaire un while( result.next() ) { }. Il ezt évident que si on a deux boucles comme ça successives, si on sort du premier while c'est que result.next() est false, donc il est possible qu'on entre dans le second while puisqu'il faudrait que result.next() soit true pour ça soit le cas.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 133
    Par défaut c'est presque bon
    Bonsoir,

    Merci pour le corrigé.

    J'ai suivi tes instructions effectivement j'ai oublié de supprimer une brace.
    J'ai épuré le tout, le code ne présente plus aucune erreur.

    Par contre j'ai une erreur à l'exécution comme suit:
    L'opération nécessite un scrollable ResultSet, mais ce ResultSet est FORWARD_ONLY.

    J'ai cherché dans les cours et j'ai trouvé l'instruction suivant: ResultSet.TYPE_SCROLL_SENSITIVE

    J'ai essayé de l'introduire mais j’obtiens des erreurs, où le placer ?

    Voici le mon code épuré:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
     public contenu findTable(int id) {
             try 
                      ( //Création d'un objet Statement
                         Statement state = connect.createStatement())    //state = état et Statement = déclaration 
                      {
     
               try 
                   ( 
                        //On récupère les MetaData
                        //L'objet result contient le résultat de la requête SQL
                     ResultSet result = state.executeQuery("SELECT * FROM contenu ORDER BY id"))
                {
     
                     int i = 0;
                     int k = 0;
                     if(result.next()){ //passe le curseur à l'élément suivant ;
                         result.last(); //last : passe le curseur sur le dernier élément ;
                         k = result.getRow(); //résultat.obtenir rangées
                         result.beforeFirst(); // passe le curseur avant le premier élément (position par défaut du curseur) ;
                     }
     
                     Object[][] t=new Object[k][7]; //déclaration d'un tableau Object double
     
                     //on met le resultat de la requete dans un tableau
                     while (result.next()){
     
                         t[i][0]=result.getInt(1);  //résultat.obtenir un int
                         t[i][1]=result.getString(2);   //obtenir un String
                         t[i][2]=result.getString(3);
                         t[i][3]=result.getString(4);
                         t[i][4]=result.getInt(5);
                         t[i][5]=result.getString(6);
                         t[i][6]=result.getDate(7);
                         i++;
                     }
     
                     System.out.println(Arrays.toString(t)); //affichage du tableau à String
                }
                catch (SQLException ex) {
                Logger.getLogger(contenuDAO.class.getName()).log(Level.SEVERE, null, ex);
            }
                        state.close();  //state.close (veut dire état.fermé)
                 }
     
                catch (SQLException e)
                  {
                  }
            return contenu;
             }
     
     
    }
    je vais continuer mes recherches

    cordialement à plus
    rapidego

  6. #6
    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
    Billets dans le blog
    2
    Par défaut
    C'est lors de la création du statement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Statement state = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

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

Discussions similaires

  1. Entrer des valeurs dans un tableau vide et afficher les éléments
    Par Tamzoro dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 16/11/2019, 15h01
  2. Réponses: 4
    Dernier message: 21/12/2013, 16h47
  3. [2.3.0] Afficher un tableau vide
    Par fredo38 dans le forum BIRT
    Réponses: 6
    Dernier message: 05/11/2008, 11h15
  4. Réponses: 11
    Dernier message: 09/12/2004, 15h03
  5. Ne pas afficher un champs qui est vide dans ma BD
    Par yoda_style dans le forum ASP
    Réponses: 3
    Dernier message: 27/04/2004, 11h40

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