Rellenar jTable a partir de un ResultSet
Eagle_de_nord
Mensajes publicados
46
Estado
Miembro
-
oumeiima Mensajes publicados 3 Estado Miembro -
oumeiima Mensajes publicados 3 Estado Miembro -
Hola,
Quisiera tener una idea sobre cómo rellenar un JTable a partir de una consulta SELECT SQL y, por supuesto, pasando por un ResultSet() ...
he visto en la web que hay que crear un TableModel pero no he entendido el principio....
gracias por orientarme ...
gracias de antemano por vuestra ayuda
<config>Windows 7 Firefox 12.0</config>
Quisiera tener una idea sobre cómo rellenar un JTable a partir de una consulta SELECT SQL y, por supuesto, pasando por un ResultSet() ...
he visto en la web que hay que crear un TableModel pero no he entendido el principio....
gracias por orientarme ...
gracias de antemano por vuestra ayuda
<config>Windows 7 Firefox 12.0</config>
2 respuestas
-
Hola,
Voy a intentar resumir el código en pasos:
1- en tu método declaras objetos en los que devuelves los registros de la base (un objeto para cada campo) por ejemplo:
Col1 = new String[100];
Col2 = new String[100];
....
2- declaras un objeto data de tipo Object así:
data = new Object[200][N]; // N siendo el número de columnas de tu JTable 200 filas
3- abres tu conexión con la base de datos ... (Class.forName.. y la parafernalia habitual)
4- la consulta
5- recuperas el resultado de la consulta en un ResultSet
// stmt siendo el preparedStatement
ResultSet rs=stmt.executeQuery();
while (rs.next()) {
Col1 [j] = rs.getString("Champ1");
Col2[j] = rs.getString("Champ2");
... // para tantas columnas como quieras devolver
data[j][i]= Col1 [j];
data[j][i+1]= Col2[j];
....
j++;
}
// los encabezados de las columnas :
String title[] = {"La columna 1", "La columna 2",....};
JTable table = new JTable(data, title);
JPanel tableau = new JPanel (new BorderLayout ());
// añade los encabezados al norte del contenedor
tableau.add (table.getTableHeader (), BorderLayout.NORTH);
tableau.add (table, BorderLayout.CENTER);
JSplitPane split3 = new JSplitPane (JSplitPane.VERTICAL_SPLIT, true, tableau, new JTextArea (" Avec entête "));
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 fenêtre
// un JScrollPane 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 with un catch ....
Il n’y a pas plus simple :-)-
-
Hola entonces, esto es lo que hice: 1) creé una clase Jforme 2) la clase contiene un botón "OK" para llamar al método en cuestión (okActionPerformed), es decir, cuando hago clic en OK me mostrará el resultado: como sigue ... PANEL 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ête ")); 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 fenêtre // un scrollPane 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 est que rien ne s'affiche dans la table quand je clique sur le 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
-
Buenas noches,
Sí, es totalmente normal. ¡Tienes que crear el JTable dentro del try justo después del while! y es solo después que añades el catch.
Entonces desplazas todo el código a partir de la creación del JTable hasta la incorporación del ScrollPane dentro del try. Después enes con el catch ...
Y normalmente debería funcionar ;)
Buen ánimo -
-
-
-
hola :) he seguido lo que escribiste pero me muestra el siguiente error !!
java:219: error: cannot find symbol
TableColumn column = null;
^
¿alguien puede ayudarme :) gracias