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 :

Boucle sur un resultSet


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut Boucle sur un resultSet
    Re-Bonjour,

    j'ai un petit soucis.
    Je fais une boucle sur le résultat d'une requete.
    Mon but est d'afficher le résultat ligne par ligne.
    Je veux donc creer dynamiquement un Jlabel ( a chaque tour de boucle ) qui contiendra l'info à afficher.
    Or je ne sais pas comment faire çà.
    Voici ma boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (int i=0; i < resultat.getRow();i++){
    JLabel (code_ass+i)=new JLabel();// c'est ici que je sais pas quoi mettre		    		  
    (code_ass+i).setText(resultat.getString("num_asso")); 
    liste.liste_bas2.add(code_ass,"wrap");
     
    resultat.next();
    } //for
    Est-ce la bonne méthode pour gérer ce type de cas ??

    Merci d'avance pour votre aide

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Tu ne peux pas faire ça comme ça ...

    Pourquoi ne pas utiliser un autre type de composant comme une JTable par exemple. Si ce n'est qu'une question d'affichage ... ?

    Sinon tu peux essayer comme ça, mais suivant ce que tu veux faire ça n'est peut être pas la meilleure solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<JLabel> labels = new ArrayList<JLabel>(); // ici on conserve les objets
    while(resultat.next()){ // c'est beaucoup plus clair de parcourir comme ça
        labels.add(new JLabel(rs.getString("num_asso")); // pour chaque ligne on crée un JLabel que l'on stocke dans la list
    }
    Peux tu nous en dire plus sur ce que tu veux faire ?

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Merci pour ta réponse.
    Ce que tu me proposes convient très bien.
    En fait le but est que à chaque clique d'un bouton "rechercher" une liste (la plus clair possible) s'affiche. Elle contient le num des l'associations concernés.

    Ton code me permet donc de remplir une liste de JLabel.
    Vaut-il mieux que j'affiche les JLabel à chaque tour de boucle? ou que à la sortie de la boucle j'affiche l'ensemble de la liste.

    Mon but étant de représenter le tout de la façon la plus claire possible. J'utilise MigLayout.

    Désolé je suis assez mauvais, mais je n'ai pas l'habitude du java.
    En tout cas merci de ton aide.

    EDIT : Ca fonctionne mais je n'affiche que 1 résultat sur deux. Sur deux label, je n'arrive à afficher que le premier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    		    	  List <JLabel> liste_code = new ArrayList<JLabel>(); 
    		    	  while(resultat.next()){
    		    		  int i=0;
    		    		  liste_code.add(new JLabel(resultat.getString("num_asso")));
    		    		  liste.liste_bas2.add(liste_code.get(i));
    		    		  i ++;
    		    	  } //while

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Tu peux effectivement ajouter chaque JLabel directement dans ton composant graphique. Dans ce cas, pas la peine de t'embêter avec la liste je pense.

    Par contre rafraichir l'affichage à chaque fois, ça dépend un peu de ton appli ....

    Par contre je me répète mais je ne pense pas que les labels soient la meilleure solution pour ce que tu veux faire. Tu souhaites simplement afficher une liste de résultats ? Dans ce cas regarde plutôt du côté de JList, JTable ....

    EDIT : Ca fonctionne mais je n'affiche que 1 résultat sur deux. Sur deux label, je n'arrive à afficher que le premier.
    Et comment fais tu l'affichage ?

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Comme tu me l'a conseillé je regarde du côté des Jtable.

    Mais Je ne sais pas comment procéder.
    Faut-il que je remplisse un vecteur à chaque tour de boucle et que je l'ajoute à ma JTable en sortie de boucle?
    Ou puis-je ajouter directement dans la JTable ?

    Voici le code de ma boucle pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String[] titres_colonnes = {"Code de l'association","Nom complet"};
    JTable tab_res=new JTable();
    //je voudrais ajouter le nom de mes colonnes
     
    while(resultat.next())
    {tab_res.add((resultat.getString("num_asso")));  // j'arrive pas à ajouter un string à mon JTable
    }//while	    		 
    liste.liste_bas2.add(tab_res); // ajout du JTable à mon JPanel
    Donc, faut-il que j'utilise un vector, un model?
    En fait jtrouve cela un compliqué alors que finalement je veux juste ajouter des string dans une table.

    Merci de votre aide

  6. #6
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Pour les JTable, il faut passer par un model. Tu trouveras un exemple dans ce tutoriel (tout ne te sera pas utile)

    Pour quelque chose de très simple tu peux te baser sur ce tutoriel de Sun, qui te donne toutes les clés dont tu as besoin ...

    Par contre essaie d'utiliser autre chose que Vector qui est un "vieil" objet. Préfère lui une ArrayList par exemple ...

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Merci bien,
    je vais étudier tout ca

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Re-salut,

    En fait je galere un peu.
    J'ai créé une classe model pour mon JTable.
    Code de la classe model :
    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
     
    package controleur;
     
    import javax.swing.table.AbstractTableModel;
     
    public class table_liste_model extends AbstractTableModel{
     
    	private static final long serialVersionUID = 1L;
     
    	// attributs
    	Object donnees[ ][ ];
        String titres[ ];
     
        public table_liste_model(Object donnees[ ][ ], String titres[ ])
     
        {
            this.donnees = donnees;
            this.titres = titres;
        }
     
     
    	public int getColumnCount() {
    		return titres.length;
    	}
     
    	public int getRowCount() {
    		return donnees.length;
    	}
     
    	public Object getValueAt(int parm1, int parm2) {
    		return donnees[parm1][parm2];
    	}
     
    	public Class getColumnClass(int c) {return getValueAt(0, c).getClass();}
     
    	public boolean isCellEditable(int row, int col) {return true;}
     
    	 public String getColumnName(int col){return titres[col];}
     
     
     
    }// class
    Ensuite dans ma fonction qui est censé remplir le JTable. Je declare donc :
    un tableau de tableau d'objets ainsi qu'un tableau de String (nom des colonnes).
    Mais dans tous les exemples que je trouve, le tableau de tableau d'objets est initialisé avec des valeurs fixes.
    Or je voudrai le declarer à vide , et y ajouter un JButton et un JLabel à chaque tour de boucle.
    Voici ma boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     Object [][] liste_res ;	    	  
    		    	  String[] titres = { "code", "nom complet"};
     
    		    	  while(resultat.next()){
     
    		    		  liste_res.add(new JLabel(resultat.getString("num_asso"))); 
    		    		  liste_res.add(new JButton(resultat.getString("nom_complet"))); 
    		    		  }//while	 
     
     
    		    	      JTable table_res = new JTable(new table_liste_model(liste_res, titres));
    		    		  recherche_association.liste_bas2.add(table_res); // ajout du JTable à mon JPanel
    Désolé d'etre un boulet, mais dans les exemples que j'ai trouvé , c'est pas dynamique alors ...

    Merci encore ...

  9. #9
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Tu as 2 possibilités. Soit tu comptes le nombre de ligne de ton resultSet pour initialiser ton tableau correctement -> Comment connaître le nombre de lignes/colonnes d'un ResultSet ?

    et ensuite tu fais quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Object [][] liste_res;
    int nbRows = 0; //... ici tu récupères le nombre de ligne
    liste_res = new Object[nbRows][]; // tu initialises la première dimension
    int index = 0;
    while(resultat.next()){
            liste_res[index++] = new Object {
                  new JLabel(resultat.getString("num_asso")),
                  new JButton(resultat.getString("nom_complet"))
            }; // tu remplis chaque ligne du tableau
    }//while
    Ou alors tu passes par une liste de Object[] pour ne pas avoir à te sourcier du nombre de ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    List<Object[]> liste_res = new ArrayList<Object[]>();
    while(resultat.next()){
            liste_res.add (new Object {
                  new JLabel(resultat.getString("num_asso")),
                  new JButton(resultat.getString("nom_complet"))
            }); // tu remplis chaque ligne du tableau
    }//while	
     
    // là par contre il faut transformer ta liste en tableau pour l'utliser ensuite
    Object[][] liste_res2 = liste_res.toArray(new Object[liste_res.size()][2]);

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2008
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Ba en fait, c'est ce code là que je testais tout à l'heure.
    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
     
    String[] titres = { "code", "nom complet"};
    		    	  ResultSetMetaData metadata = resultat.getMetaData();
    		    	  int nombreColonnes = metadata.getColumnCount();
    		    	  Object [][] liste_res;
    		    	  liste_res = new Object[nombreColonnes][];
    		    	  int index = 0;
     
     
    		    	  while(resultat.next()){
    		    	        liste_res[index++] = new Object []{
     
    		    	              new JLabel(resultat.getString("num_asso")),
    		    	              new JButton(resultat.getString("nom_complet"))
     
    		    	  }; 
    		    	}//while
     
     
    		    	  JTable table_res = new JTable(liste_res, titres);
     
    		    	  recherche_association.liste_bas2.add(table_res); // ajout du JTable à mon JPanel
    A l'affichage,
    j'ai bien un tableau de 2x2 (c'est le résultat attendu), mais il n'écrit pas les valeurs. Au lieu de cela j'ai :
    javax.swing.JLabel[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=8388608,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,horizontalAlignment=LEADING,horizontalTextPosition=TRAILING,iconTextGap=4,labelFor=,text=666,verticalAlignment=CENTER,verticalTextPosition=CENTER]

    Et je comprend pas trop l'erreur.


    Merci à toi In pour toute l'aide que tu m'as apporté.
    Je te reverserai bien entendu une partie de mon indemnité de stage

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

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. Update dans une boucle sur un resultset
    Par ptr83 dans le forum JDBC
    Réponses: 0
    Dernier message: 07/04/2010, 11h38
  3. [JDBC]Boucle sur tous les éléments du ResultSet
    Par Terminator dans le forum JDBC
    Réponses: 1
    Dernier message: 22/09/2005, 19h30
  4. L'installation d'XP boucle sur elle-même
    Par pf106 dans le forum Windows XP
    Réponses: 13
    Dernier message: 20/08/2005, 14h55
  5. [MFC] Boucle sur un bouton
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 17/02/2004, 11h37

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