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

greglover 58 Messages postés mardi 16 janvier 2007Date d'inscription 10 mars 2008 Dernière intervention - 16 janv. 2007 à 17:58 - Dernière réponse : greglover 58 Messages postés mardi 16 janvier 2007Date d'inscription 10 mars 2008 Dernière intervention
- 19 janv. 2007 à 12:26
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
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
lafolle24320 406 Messages postés samedi 26 mars 2005Date d'inscription 29 juin 2009 Dernière intervention - 17 janv. 2007 à 09:27
3
Merci
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

Merci lafolle24320 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de lafolle24320
lafolle24320 406 Messages postés samedi 26 mars 2005Date d'inscription 29 juin 2009 Dernière intervention - 17 janv. 2007 à 09:23
0
Merci
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);
Commenter la réponse de lafolle24320
lafolle24320 406 Messages postés samedi 26 mars 2005Date d'inscription 29 juin 2009 Dernière intervention - 17 janv. 2007 à 09:30
0
Merci
Ce lien à l air moins complexe sinon :
http://lbdpc15.epfl.ch/~ibd01_4/Editing.java
Commenter la réponse de lafolle24320
cs_Dellys 95 Messages postés mercredi 26 octobre 2005Date d'inscription 24 mars 2008 Dernière intervention - 17 janv. 2007 à 10:40
0
Merci
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  
Commenter la réponse de cs_Dellys
greglover 58 Messages postés mardi 16 janvier 2007Date d'inscription 10 mars 2008 Dernière intervention - 17 janv. 2007 à 18:01
0
Merci
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.
Commenter la réponse de greglover
greglover 58 Messages postés mardi 16 janvier 2007Date d'inscription 10 mars 2008 Dernière intervention - 18 janv. 2007 à 13:16
0
Merci
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
Commenter la réponse de greglover
greglover 58 Messages postés mardi 16 janvier 2007Date d'inscription 10 mars 2008 Dernière intervention - 18 janv. 2007 à 13:23
0
Merci
par contre je me retrouve toujours avec un :

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

dans la console
Commenter la réponse de greglover
greglover 58 Messages postés mardi 16 janvier 2007Date d'inscription 10 mars 2008 Dernière intervention - 18 janv. 2007 à 18:34
0
Merci
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
Commenter la réponse de greglover
lafolle24320 406 Messages postés samedi 26 mars 2005Date d'inscription 29 juin 2009 Dernière intervention - 19 janv. 2007 à 08:35
0
Merci
salut,
pour les colonnes éditables regarde mon premier post et tu auras ta réponse.
Bon courage

lafolle
Commenter la réponse de lafolle24320
greglover 58 Messages postés mardi 16 janvier 2007Date d'inscription 10 mars 2008 Dernière intervention - 19 janv. 2007 à 11:22
0
Merci
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
Commenter la réponse de greglover
greglover 58 Messages postés mardi 16 janvier 2007Date d'inscription 10 mars 2008 Dernière intervention - 19 janv. 2007 à 12:26
0
Merci
j'ai trouvé pour le redimensionnement des colonnes

ensuite je regarderai le celleditable

merci
Commenter la réponse de greglover

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.