Récupérer données d'une bdd pour les mettre dans une JTable [Résolu]

Signaler
Messages postés
58
Date d'inscription
mardi 16 janvier 2007
Statut
Membre
Dernière intervention
10 mars 2008
-
greglover
Messages postés
58
Date d'inscription
mardi 16 janvier 2007
Statut
Membre
Dernière intervention
10 mars 2008
-
Bonsoir,


je peine moi aussi avec les JTable à afficher des données.


Je souhaite les extraire d'une base de donnée d'élèves avec 5 champs.


Je n'arrive pas à adapter le code, que j'ai trouvé sur ce forum, pour extraire les infos non plus à partir d'un fichier mais d'une bdd


J'ai essayé plein de trucs (enfin quand je dis plein...) mais je suis débutant en java et je n'ai jamais utilisé les Jtable.


Je me suis pourtant servi de plein de tuto mais j'en ai trouvé aucun qui extrait les infos d'une bdd.


Cela fait plusieurs jours que je suis bloqué sur ce point. J'aimerais que vous m'aidiez svp, un exemple de code serait le mieux.


J'espère que quelqu'un prendra le temps de répondre car il ne me reste
plus longtemps pour finir ce programme (je suis en stage et n'ai pas de
maitre de stage car dans une école maternelle et primaire))


Merci d'avance


ps : je sais me connecter à la bdd, j'ai déjà fait ajouter élève/modifier/supprimer/afficher et là je dois faire afficher classe
A voir également:

11 réponses

Messages postés
406
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
29 juin 2009
2
au fait c'est quel lien que tu as regardé sur code source?
Parce que celui ci à l'air pas mal du tout :
http://www.javafr.com/codes/PASSEZ-REQUETE-SQL-JTABLE_17793.aspx

Bonne continuation
lafolle
Messages postés
406
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
29 juin 2009
2
Bonjour,

Voici un début d'exemple avec un sort table qui permet de trier les données :

Ici je ne fais que la déclaration de sort table après je ne sais plus
comment on fait pour lier ta requête avec les columSelects.

Mais c'est un début, attention il est important que les columnSelects comporte les noms de tes champs.

Si dans la journée je me rappelle de la liaison je te le fais savoir.


bonne continuation en espérant te débloquer un peu


lafolle


// Set table

        absMoleculeTable = new SSortTable()


             absMoleculeTable

           
    .setPreferredScrollableViewportSize(new
Dimension(400, 90));

 

        // Set table selector

        absMoleculeTable.setSelector("absMoleculeList");


        // Set column selectors --> c les champs de ta requêtes

        String[] columnSelects = { "molName", "molTag", "molReference",

           
    "molCollision", "molCompute", "molDensity",
"molAbundance",

       
        "molTemperature", "molTkin",
"molDispersion", "molSize"};

        absMoleculeTable.setColumnSelectors(columnSelects);


        // Set column names ---> nom de tes colonnes

        String[] columnNames = { "Species", "Tag", "Database",

           
    "Collision", "Compute", "N(Sp) (/cm2)", "Abundance
(/H2O)",

       
        "Tex (K)", "TKin (K)", "FWHM
[km/s]", "Size (")"};

        absMoleculeTable.setColumnNames(columnNames);

   


        // Set editables columns -->pour pouvoir modifier tes lignes ou pas

        boolean[] editables = { false, false, false, false, true,

                true, true, true, true, true, true};

        STableModel tableModel = (STableModel) absMoleculeTable.getModel();

        tableModel.setEditableColumns(editables);


 

        // Make the table vertically scrollable

        absScrollPanel = new JScrollPane(absMoleculeTable);
Messages postés
406
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
29 juin 2009
2
Ce lien à l air moins complexe sinon :
http://lbdpc15.epfl.ch/~ibd01_4/Editing.java
Messages postés
95
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
24 mars 2008

Bonjour
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??> 

Voici un exemple de code que j'ai pu utilisé ,j'espère qu’il vous sera utile

http://forum.java.sun.com/thread.jspa?forumID=57&threadID=497641

Salutations  
Messages postés
58
Date d'inscription
mardi 16 janvier 2007
Statut
Membre
Dernière intervention
10 mars 2008

merci beaucoup pour toute cette aide, entre temps j'ai moi aussi réussi à adapté un code pour en sortir ce que je veux (c'était vraiment pas dur lol) mais là je dois laisser Internet.

Je posterai mon code demain et regarderai toutes vos aides mais je vous remercie déjà infiniment.
Messages postés
58
Date d'inscription
mardi 16 janvier 2007
Statut
Membre
Dernière intervention
10 mars 2008

Re

alors voici mon code avant de regarder toute votre aide. Je vais maintenant regarder tout cela pour voir si je trouve ce que je cherche à savoir :
modifier la taille de certaine colonne
rendre les celulles non éditable
colorier le fond d'une ligne sur deux en gris (pour avoir une meilleur lisibilité)

Merci d'avance si quelqu'un sait comment le faire

ps : d'après ce que j'ai compris des tableaux, on doit utiliser une sorte de modèle. Moi j'ai cherché justement à ne pas avoir besoin d'un "model" => c'est déjà bien assez compliqué comme sa

<hr size="2" width="100%" />
public void afficher_classe_standard(String classe)
    {
        try {
            setSize(800, 531);
            lbl_effectif = new JLabel();
            lbl_effectif.setBounds(new Rectangle(106, 8, 71, 19));
            lbl_effectif.setText("Effectif : ");
            Vector columnNames = new Vector();
            Vector data = new Vector();
            try
            {
                {
                    this.setSize(700, 431);
                }
                  // Se connecter à la base de donnée
                  Class.forName("com.mysql.jdbc.Driver");
                  Connection connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/montalembert","root","" );
                 
                  // Récupérer les données des élèves
                  Statement stmt = (Statement) connection.createStatement();                  String sql "SELECT nom_enfant,prenom_enfant,date_de_naissance_enfant,adresse1_enfant,cp_ville1_enfant,responsable_legal1_enfant FROM enfant WHERE `classe_enfant` '"+classe+"' ORDER BY nom_enfant,prenom_enfant";
                  ResultSet rs = (ResultSet) stmt.executeQuery( sql );
                 
                  // Récupérer le titre des colonnes
                  ResultSetMetaData md = (ResultSetMetaData) rs.getMetaData();
                 
                  // Récupérer le nombre de colonne
                  int columns = md.getColumnCount();
                 
                  // Récupérer le nom des colonnes
                  for (int i = 1; i <= columns; i++)
                  {
                      // ignorer le champ cp_ville pour éviter la création d'une colonne
                      if (!(md.getColumnName(i).equalsIgnoreCase("cp_ville1_enfant")))
                          columnNames.addElement( md.getColumnName(i).replace("_enfant", "").toUpperCase().replace("_", " ").replace("1", "") );
                  }

                  // Récupérer les données des colonnes
                  // Tant qu'il y a quelquechose à lire : while
                  while (rs.next())
                  {
                      nb=rs.getRow();
                      Vector row = new Vector(columns);
                       
                      for (int i = 1; i <= columns; i++)
                      {
                              row.addElement( rs.getString("nom_enfant") );
                              row.addElement( rs.getString("prenom_enfant") );
                              row.addElement( rs.getString("date_de_naissance_enfant") );
                                // Concat. avec le champs cp_ville dans la colonne adresse
                              row.addElement( rs.getString("adresse1_enfant")+" "+rs.getString("cp_ville1_enfant") );
                              row.addElement( rs.getString("responsable_legal1_enfant"));
                      }
                      data.addElement( row );
                  }

                  // Tout fermer
                  rs.close();
                  stmt.close();
            }
            catch(Exception e)
            {
                  System.out.println( e );
            }
 
           
            // Créer la table avec les données de la base
            JTable table = new JTable(data, columnNames);
 
            // Créer le scrollpane permettant de voir les champs qui sortent de la fenêtre
            JScrollPane scrollPane = new JScrollPane(table);
            scrollPane.setBorder(null);
           
           
            // Créer le panel d'entete
            JPanel entete = new JPanel();
            entete.setLayout(null);
            entete.setPreferredSize(new Dimension(800, 30));
            entete.setSize(new Dimension(800, 30));
            entete.add(lbl_effectif, null);
           
            // Ajouter le scrollpane à panel principal
            getPnl_affichage_classe().add(entete, BorderLayout.NORTH );
            getPnl_affichage_classe().add(scrollPane, BorderLayout.CENTER);           
}
        catch (Exception e) {e.printStackTrace();}
       
        DataBaseImpl base = new DataBaseImpl();
        base.setParametre("127.0.0.1","root","","montalembert");
        try
        {
            base.open();
            // Récupérer le nom de la maitresse
            String rq="SELECT maitresse_classe,libelle_classe FROM classe WHERE `libelle_classe` = '"+classe+"'";
            ResultSet rqt = base.query(rq);
           
            while(rqt.next())
            {
                lbl_maitresse.setText(lbl_maitresse.getText()+rqt.getString("maitresse_classe"));
                base.close();
            }
        }
        catch(Exception e){System.out.println( e );}
       
        DataBaseImpl base2 = new DataBaseImpl();
        base2.setParametre("127.0.0.1","root","","montalembert");
        try
        {
            base.open();
            // Compter nombre d'élève dans la classe
            String nb="SELECT COUNT(*) AS nbr FROM enfant WHERE classe_enfant = '"+classe+"'";
            ResultSet nbr = base.query(nb);
           
            while(nbr.next())
            {
                lbl_effectif.setText(lbl_effectif.getText()+nbr.getInt("nbr"));
                base.close();
            }
        }
        catch(Exception e){System.out.println( e );}
    }

Merci encore
Messages postés
58
Date d'inscription
mardi 16 janvier 2007
Statut
Membre
Dernière intervention
10 mars 2008

par contre je me retrouve toujours avec un :

java.sql.SQLException: Operation not allowed after ResultSet closed

dans la console
Messages postés
58
Date d'inscription
mardi 16 janvier 2007
Statut
Membre
Dernière intervention
10 mars 2008

Bonsoir,

j'ai parcouru vos réponses, tout d'abord merci

@lafolle24320 : Merci pour ton bout de code mais après vérification je n'aurai pas besoin de sort table, puisque je veux juste trier par nom et je le fais directement dans ma requête. Par contre je suis dégouté d'avoir galéré si longtemps là dessus car le lien que tu me donne lors de ta deuxième intervention m'aurait convenu tout a fait. En même temps j'aurai appris un peu.

@Dellys : comme tu peux le voir, nous avons trouvé le même lien. Je me suis servi de ce bout de code trouvé sur sun pour faire ma classe. Il était parfait.

Maintenant je cherche à faire ceci :
modifier la taille de certaine colonne
rendre les celulles non éditable // facultatif
colorier le fond d'une ligne sur deux en gris (pour avoir une meilleur lisibilité)

En ce qui concerne les cellules non éditable, a chaque fois cela implique d'avoir un Tablmodel ce qui m'embête car je ne comprends pas exactement ce que c'est, mais je ne demande que ça d'apprendre.

Puisque c'est un autre problème je vais créer un autre topic par soucis de clarté. Je donne la réponse acceptée à lafolle24320 parce qu'elle m'a beaucoup aidé même si c'est aussi le cas de Dellys qui a trouvé exactement la même chose que moi. J'espère que ce n'est pas grave.

Merci encore
Messages postés
406
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
29 juin 2009
2
salut,
pour les colonnes éditables regarde mon premier post et tu auras ta réponse.
Bon courage

lafolle
Messages postés
58
Date d'inscription
mardi 16 janvier 2007
Statut
Membre
Dernière intervention
10 mars 2008

salut,

j'ai une erreur sur :

absMoleculeTable
STableModel

il ne reconnait ni l'un ni l'autre, cela vient peut être des import, faut ajouter quoi dans les import pour ces 2 trucs là

l'erreur est qu'ils ne peuvent être résolu en type.

merci
Messages postés
58
Date d'inscription
mardi 16 janvier 2007
Statut
Membre
Dernière intervention
10 mars 2008

j'ai trouvé pour le redimensionnement des colonnes

ensuite je regarderai le celleditable

merci