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

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Points : 60
    Points
    60
    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 : 54
    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,

    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 du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Points : 60
    Points
    60
    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 : 54
    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
    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 du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Points : 60
    Points
    60
    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 : 54
    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
    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.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Points : 60
    Points
    60
    Par défaut me retourne l'adresse du tableau
    Bonsoir,

    J'ai rectifié suivant tes conseils dont je t'en remercie.
    Cette fois-ci je n'ai plus de message d'erreur.
    Mais il m'affiche un truc bizarre, d'après mes recherches dans les différents cours il s'agit des adresses du tableau !

    [[Ljava.lang.Object;@f672284, [Ljava.lang.Object;@7e428ccd, [Ljava.lang.Object;@7e13e115, [Ljava.lang.Object;@80f656e, [Ljava.lang.Object;@3e4a05e9, [Ljava.lang.Object;@5404d209]

    C'est cette ligne là qui permet l'affichage ci-dessus en console.
    System.out.println(Arrays.toString(t)); //affichage du tableau à String

    ci-joint mon nouveau 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
        public contenu findTable(int id) {
             try 
                      ( //Création d'un objet Statement
                         Statement state = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY))    //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.first();    //passe le curseur sur le premier élément
                         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;
        }
    }
    Cordialement
    rapidego

  8. #8
    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 : 54
    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
    Citation Envoyé par Rapidego Voir le message
    C'est cette ligne là qui permet l'affichage ci-dessus en console.
    System.out.println(Arrays.toString(t)); //affichage du tableau à String
    Arrays.toString(t) concatène les appels de toString() sur chaque élément du tableau t. Comme ton tableau est un tableau à 2 dimensions, c'est comme si c'était un tableau à une dimension de tableaux. Un appel de toString() sur un tableau retourne ce que tu vois dans ta console (du genre [Ljava.lang.Object;@3e4a05e9). C'est d'ailleurs la raison de l'utilisation de Arrays.toString().

    Donc il te faut aussi appliquer une méthode particulière pour afficher chaque élément.

    La méthode Arrays.deepToString() répète récursivement un affichage de chaque élément de type tableau par Arrays.toString().

    Donc il te suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(Arrays.deepToString(t)); //affichage du tableau à String
    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.

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Points : 60
    Points
    60
    Par défaut affichage du tableau mais en une seule ligne
    Bonsoir,

    Un grand merci grâce à ton aide j'ai enfin un affichage du tableau.

    Cette commande je l'avais repéré dans un de vos cours. Arrays.deepToString(t)

    Le cours intitulé: FAQ Langage Java du 19 septembre 2017
    Je l'avais également essayé hier soir mais j'ai surement mal interprété.

    J'ai encore une question l'affichage de mon tableau en console se fait sous forme d'une seule ligne entre crochets comme suit:

    [[1, viande , veau , roulé , 8, HD , 2019-10-09], [2, tarte , quiche lorraine , entière , 3, HM , 2019-10-09], etc... j'ai actuellement 6 lignes dans ma table nommée contenu

    Est-il possible d'afficher la table sous forme de colonnes titrées ? comme une table ?

    Pourrait-tu me donner un lien pour un de vos cours qui convienne le mieux ?

    Encore une fois un grand merci

    Cordialement et à +++

    rapidego ( c'est pas toujours le cas) !!!

  10. #10
    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 : 54
    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
    Citation Envoyé par Rapidego Voir le message


    Est-il possible d'afficher la table sous forme de colonnes titrées ? comme une table ?
    C'est possible en écrivant sa propre méthode, par exemple :

    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
    	public static void printTable(Object[][] array, CharSequence delimiter, CharSequence prefix, CharSequence suffix, String rowseparator, String...titles) {
    		int[] width = new int[Arrays.stream(array).mapToInt(a->a.length).max().orElse(0)]; 
    	    for(int i=0; i<width.length; i++) {
    	    	final String title = i<titles.length?titles[i]:""; 
    	    	final int fi = i;
    	    	width[i]=Math.max(title.length(), Arrays.stream(array).map(a->a.length>=fi?a[fi]:"").filter(Objects::nonNull).map(String::valueOf).mapToInt(String::length).max().orElse(1)); 
    		} 
     
    	    int linelength = 0;
        	if ( rowseparator!=null && !rowseparator.isEmpty() ) {
        		linelength = Arrays.stream(width).sum() + width.length-1*delimiter.length() + prefix.length() + suffix.length();
        	}
        	else {
        		linelength = 0;
        	}
        	if ( linelength>0 ) {
        		System.out.println(rowseparator.repeat(linelength).substring(0, linelength));
        	}
     
    	    if ( titles.length>0 ) {
    	    	printRow(titles, width, delimiter, prefix, suffix);
    	    }
     
        	if ( linelength>0 ) {
        		System.out.println(rowseparator.repeat(linelength).substring(0, linelength));
        	}
     
    		for(Object[] row : array) {
    			printRow(row, width, delimiter, prefix, suffix);
    		}
        	if ( linelength>0 ) {
        		System.out.println(rowseparator.repeat(linelength).substring(0, linelength));
        	}
    	}
     
    	private static void printRow(Object[] row, int[] width, CharSequence delimiter, CharSequence prefix, CharSequence suffix) {
    		StringJoiner sj = new StringJoiner(delimiter, prefix, suffix);
    		for(int i=0; i<width.length; i++) {
    			if ( width[i]==0 ) {
    				sj.add("");
    			}
    			else {
    				if ( i<row.length ) {
    					sj.add(String.format("%1$"+width[i]+"s", row[i]).replace('0', ' '));
    				}
    				else {
    					sj.add(" ".repeat(width[i])); // Java 11, pour avant faire
    					// sj.append(String.format("%1$"+width[i]+"s", "").replace('0', ' ')); // Java <11
    				}
    			}
    		}
    		System.out.println(sj.toString()); 
    	}
    Appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printTable(t," | ","| "," |" ,"-", "titre1","titre2");
    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.

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Points : 60
    Points
    60
    Par défaut choix d'une jtable pour affichage
    Bonsoir,

    Merci pour l'ensemble de tes réponses et conseils.

    Pour l'affichage je vais choisir une jTable.
    En ce moment je consulte sur la toile afin de rassembler des informations.
    Je vais étudier le problème consulter les différents cours et essayer.

    Cordialement à +++

    rapidego

  12. #12
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Dans le dossier demo du JDK (en tout cas dans le AdoptOpenJDK) tu peux trouver des TableExample avec la source du JDBCAdapter qui est en fait un AbstractTableModel que tu peux utiliser comme Model pour une jTable ou une JXTable...

    Cela te permet de remplir ta jTable très facilement.

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Points : 60
    Points
    60
    Par défaut recherche pour remplir une jTable
    Bonsoir,

    Merci pour le lien.
    J'ai ouvert la page mais je ne vois pas où se trouve les tutos ou explication concernant les jTables

    Excuse moi j'ai trouvé les infos sur jTable merci pour ton lien!!!

    à +++
    rapidego

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Points : 60
    Points
    60
    Par défaut
    Appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printTable(t," | ","| "," |" ,"-", "titre1","titre2");
    [/QUOTE]

    Bonsoir,

    Je suis toujours dans mes recherches, entre temps j'ai réussi à construire un jTable avec un tableModel.

    Mais mon problème reste comment insérer mon Tableau dans cette jTable.

    Voici mon code modifié pourrait-tu m'orienter dans ce sens:

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
        public contenu findTable(int id) {
             try 
                      ( //Création d'un objet Statement
                         Statement state = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY))    //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; //variable pour l'incrémentation de while
                     int k = 0;// variable utiliser pour obtenir le nombre de rangées
     
                     if(result.next()){ //passe le curseur à l'élément suivant ;
                         result.first();    //passe le curseur sur le premier élément
                         result.last(); //last : passe le curseur sur le dernier élément ;
                         k = result.getRow(); //résultat.pour obtenir le nombre de rangées de la table
                         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
                     //la boucle ci-dessous affiche les données de 6 colonnes (j'en ai  6)
                     //si je supprime une ligne de cette boucle j'obtiens un NULL sur une donnée de la colonne concernée.
                     while (result.next()){
                         t[i][0]=result.getInt(1);  //résultat.obtenir un int
                         t[i][1]=result.getString(2);   //résultat.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++;
                     }
     
             //fen^tre pour afficher la jTable 
          JFrame voirtable = new JFrame( "Table Contenu" );
     
          //création du model de jTable
          DefaultTableModel tableModel = new DefaultTableModel();
          JTable table = new JTable(tableModel);     
     
          //ajouter les titres des colonnes
          tableModel.addColumn("id" );
          tableModel.addColumn("CATEGORIES");
          tableModel.addColumn("TYPE");
          tableModel.addColumn("NOM");
          tableModel.addColumn("QUANTITE");
          tableModel.addColumn("ENDROIT");
          tableModel.addColumn("DATE_ENTRE");
     
     
          //configuration de lajTable
          voirtable.setSize(650, 150);
          voirtable.add(new JScrollPane(table));
          voirtable.setVisible(true);
          voirtable.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
     
                //  System.out.println(Arrays.deepToString(t));    //affichage du tableau à String en une seule ligne
                }
                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;
        }
    }
    A +++
    rapidego

  15. #15
    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 : 54
    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
    Pour mettre tes données dans la JTable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String[] columns = {"id","CATEGORIES","TYPE","NOM","QUANTITE","ENDROIT","DATE_ENTRE"};
    DefaultTableModel tableModel = new DefaultTableModel(t, columns);
    JTable table = new JTable(tableModel);
    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.

  16. #16
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 116
    Points : 60
    Points
    60
    Par défaut enfin c'est super affichage dans une jtable
    Bonsoir,

    Un grand merci à joel.drigo qui m'a suivi tout au long de ces essais
    Qu'il excuse mon impatience (les retraités n'ont jamais le temps!!!!)

    C'est que j'avais déjà trouvé lors de mes recherches un code très proche sauf qu'il ne m'affichait qu'un seul enregistrement (la ligne 1)

    Là toute la table est affichée c'est super!!!
    Je vais donc appliquer ce bout de code à mes autres fonctions qui pour l'instant affichent seulement en console.

    Mon objectif suivant sera l'impression papier ce que je sais faire et que j'ai déjà pratiqué dans des projets antérieurs.

    Ci-joint le code pour informations à d'autres

    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
    64
        public contenu findTable(int id) {
             try 
                      ( //Création d'un objet Statement
                         Statement state = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY))    //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; //variable pour l'incrémentation de while
                        int k = 0;// variable utiliser pour obtenir le nombre de rangées
     
                     if(result.next()){ //passe le curseur à l'élément suivant ;
                         result.first();    //passe le curseur sur le premier élément
                         result.last(); //last : passe le curseur sur le dernier élément ;
                         k = result.getRow(); //résultat.pour obtenir le nombre de rangées de la table
                         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
                     //la boucle ci-dessous affiche les données de 6 colonnes (j'en ai  6)
                     //si je supprime une ligne de cette boucle j'obtiens un NULL sur une donnée de la colonne concernée.
                     while (result.next()){
                         t[i][0]=result.getInt(1);  //résultat.obtenir un int
                         t[i][1]=result.getString(2);   //résultat.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++;
                     }
     
                //fenêtre pour afficher la jTable 
             JFrame voirtable = new JFrame( "Table Contenu" );
     
             //Merci à joel.drigo****Affichage des colonnes table dans la jTable**********************************
            String[] columns = {"id","CATEGORIES","TYPE","NOM","QUANTITE","ENDROIT","DATE_ENTRE"};
     
            //****Affichage des données lignes de la table contenu dans la jTable**********************************
            DefaultTableModel tableModel = new DefaultTableModel(t, columns);
            JTable table = new JTable(tableModel);
     
                //configuration de la jTable
              voirtable.setSize(650, 150);
              voirtable.add(new JScrollPane(table));
              voirtable.setVisible(true);
              voirtable.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
     
                }
     
                        state.close();  //state.close (veut dire state (état.fermé)
                 }
               catch (SQLException ex) {
                Logger.getLogger(contenuDAO.class.getName()).log(Level.SEVERE, null, ex);
                    }
            return contenu;
      }
    Un cordial salut à tous

    rapidego

  17. #17
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Citation Envoyé par Rapidego Voir le message
    Bonsoir,

    Merci pour le lien.
    J'ai ouvert la page mais je ne vois pas où se trouve les tutos ou explication concernant les jTables

    Excuse moi j'ai trouvé les infos sur jTable merci pour ton lien!!!

    à +++
    rapidego
    Cela fait longtemps mais cela peut servir à d'autres...

    Ce trouve dans OpenJDK 10 dans le dossier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OpenJDK10U-jdk_x64_windows_hotspot_10.0.2_13.zip\jdk-10.0.2+13\demo\jfc\TableExample\src.zip
    Si tu combine avec une JXTable de SwingX c'est vraiment cool...

+ 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, 16h01
  2. Réponses: 4
    Dernier message: 21/12/2013, 17h47
  3. [2.3.0] Afficher un tableau vide
    Par fredo38 dans le forum BIRT
    Réponses: 6
    Dernier message: 05/11/2008, 12h15
  4. Réponses: 11
    Dernier message: 09/12/2004, 16h03
  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, 12h40

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