Remplir jTable à partir d'un ResultSet
Eagle_de_nord
Messages postés
41
Date d'inscription
Statut
Membre
Dernière intervention
-
oumeiima Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
oumeiima Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voila j'aimerai bien avoir une idée sur le remplissage des jTable a partir d'une requête SELECT SQL et bien sur en passant par un ResultSet() ...
j'ai vu sur le net qu'il faut créer un TableModel mais je n'ai compris le principe....
merci de me guider ...
merci d'avance pour votre aide
<config>Windows 7 Firefox 12.0</config>
Voila j'aimerai bien avoir une idée sur le remplissage des jTable a partir d'une requête SELECT SQL et bien sur en passant par un ResultSet() ...
j'ai vu sur le net qu'il faut créer un TableModel mais je n'ai compris le principe....
merci de me guider ...
merci d'avance pour votre aide
<config>Windows 7 Firefox 12.0</config>
A voir également:
- Remplir jTable à partir d'un ResultSet
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Organigramme a remplir word - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Identifier un tableau à partir d'une photo - Forum Graphisme
- Fitness park a partir de quel age - Forum Loisirs / Divertissements
2 réponses
Bonjour,
Je vais essayer de te résumer le code en étapes :
1- dans ta méthode tu déclares des objets dans lesquelles tu retournes les enregistrement de la base ( un objet pour chaque champ) ex :
Col1 = new String[100];
Col2 = new String[100];
....
2- tu déclares un objet data de type Object comme ceci :
data = new Object[200][N]; // N étant le nombre de colonnes de ton JTable 200 nb lignes
3- tu ouvres ta connexion avec la base de données ... (Class.forName.. et le baratin qui va avec)
4- la requête
5- tu récupère le résultat de la requête dans un ResultSet
// stmt etant le preparedStatement
ResultSet rs=stmt.executeQuery();
while (rs.next()) {
Col1 [j] = rs.getString("Champ1");
Col2[j] = rs.getString("Champ2");
... // pour autant de colonnes que tu veux retourner
data[j][i]= Col1 [j];
data[j][i+1]= Col2[j];
....
j++;
}
// les entetes des colonnes :
String title[] = {"La colonne 1", "La colonne 2",....};
JTable table = new JTable(data, title);
JPanel tableau = new JPanel (new BorderLayout ());
// ajoute les entetes au nord du conteneur
tableau.add (table.getTableHeader (), BorderLayout.NORTH);
tableau.add (table, BorderLayout.CENTER);
JSplitPane split3 = new JSplitPane (JSplitPane.VERTICAL_SPLIT, true, tableau, new JTextArea (" Avec ent\u00EAte "));
TableColumn column = null;
for(int i=0;i<4 ; i++){
column= table.getColumnModel().getColumn(i);
column.setPreferredWidth(180);
}
P.add(tableau); // P étant le panel de la fenetre
// un scrollPan en cas de besoin
JScrollPane scrollpane = new JScrollPane(P,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
this.getContentPane().add(scrollpane);
6- tu finis avec un catch ....
Il n'y a pas plus simple :-)
Je vais essayer de te résumer le code en étapes :
1- dans ta méthode tu déclares des objets dans lesquelles tu retournes les enregistrement de la base ( un objet pour chaque champ) ex :
Col1 = new String[100];
Col2 = new String[100];
....
2- tu déclares un objet data de type Object comme ceci :
data = new Object[200][N]; // N étant le nombre de colonnes de ton JTable 200 nb lignes
3- tu ouvres ta connexion avec la base de données ... (Class.forName.. et le baratin qui va avec)
4- la requête
5- tu récupère le résultat de la requête dans un ResultSet
// stmt etant le preparedStatement
ResultSet rs=stmt.executeQuery();
while (rs.next()) {
Col1 [j] = rs.getString("Champ1");
Col2[j] = rs.getString("Champ2");
... // pour autant de colonnes que tu veux retourner
data[j][i]= Col1 [j];
data[j][i+1]= Col2[j];
....
j++;
}
// les entetes des colonnes :
String title[] = {"La colonne 1", "La colonne 2",....};
JTable table = new JTable(data, title);
JPanel tableau = new JPanel (new BorderLayout ());
// ajoute les entetes au nord du conteneur
tableau.add (table.getTableHeader (), BorderLayout.NORTH);
tableau.add (table, BorderLayout.CENTER);
JSplitPane split3 = new JSplitPane (JSplitPane.VERTICAL_SPLIT, true, tableau, new JTextArea (" Avec ent\u00EAte "));
TableColumn column = null;
for(int i=0;i<4 ; i++){
column= table.getColumnModel().getColumn(i);
column.setPreferredWidth(180);
}
P.add(tableau); // P étant le panel de la fenetre
// un scrollPan en cas de besoin
JScrollPane scrollpane = new JScrollPane(P,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
this.getContentPane().add(scrollpane);
6- tu finis avec un catch ....
Il n'y a pas plus simple :-)
salut :) j'ai suivi ce que vous avez ecrit mais il mafiche l'rreru suivante !!
java:219: error: cannot find symbol
TableColumn column = null;
^
est ce que quekqu'un peut m'aider :) merci
java:219: error: cannot find symbol
TableColumn column = null;
^
est ce que quekqu'un peut m'aider :) merci
alors voila ce que j'ai fais :
1) j'ai créé une classe Jforme
2) la classe contient un bouton "OK "pour appeller le méthode en question (okActionPerformed) c-a-d lorsque je clique sur OK il va m'afficher le résultat :comme suite ...
JPanel p = new JPanel (new BorderLayout ());
try {
Class.forName("com.mysql.jdbc.Driver");
connexion = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/csh","root","");
statement = (Statement) connexion.createStatement();
String SelectUser =" Select * from compte ";
resultat = (ResultSet) statement.executeQuery(SelectUser);
while (resultat.next()){
int j=0;
int i=0;
Col1 [j] = resultat.getString("login");
Col2[j] = resultat.getString("password");
data[j][i]= Col1 [j];
data[j][i+1]= Col2[j];
}// fin while
} // fin try
catch (ClassNotFoundException ex) {
Logger.getLogger(model.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(model.class.getName()).log(Level.SEVERE, null, ex);
}
catch(Exception e){
System.out.println(e);
}
JTable table = new JTable(data, title);
JPanel tableau = new JPanel (new BorderLayout ());
tableau.add (table.getTableHeader (), BorderLayout.NORTH);
tableau.add (table, BorderLayout.CENTER);
JSplitPane split3 = new JSplitPane (JSplitPane.VERTICAL_SPLIT, true, tableau, new JTextArea (" Avec ent\u00EAte "));
TableColumn column = null;
for (int k =0; k<2 ; k++){
column= table.getColumnModel().getColumn(k);
column.setPreferredWidth(180);
}
p.add(tableau); // P étant le panel de la fenetre
// un scrollPan en cas de besoin
JScrollPane scrollpane = new JScrollPane(p,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
this.getContentPane().add(scrollpane);
// TODO add your handling code here:
}
Merci le Problème et que rien ne s'affiche dans la table quand je clique sur bouton "OK "...
et je n'ai aucun message d'erreur sur Netbeans
je n'ai que
"
run:
BUILD SUCCESSFUL (total time: 4 seconds)"
merci de votre aide
Oui c'est tout à fait normal ! il faut que tu crées le JTable à l'intérieur du try juste aprés le while! et ce n'est que après que tu ajoutes le catch!
Donc tu déplaces tout le code à partir de la création du JTable jusqu'à l'ajout du ScrollPane dans le try. Ensuite tu enchaînes avec le catch ...
Et normalement ca devrait fonctionner ;)
Bon courage
alors j'ai corrigé ce que vous m'avais signalé ,
mais malgré cela ça ne fonctionne pas .. pourtant avec le System.out.println(data [0][0] +" "+ data [0][1] ); affiche le résultat de la requête correctement ...
je vois pas la déclaration du string tilte ( attribut du JTable dans ton code ) ! vérifies il se peut que l'erreur vienne de là ;)