Hace unos dias me encontre con un ligero problema en java que consistia basicamente en mostrar el resultado de una consulta en un JTable y la verdad que es bastante sencillo y para los que an trabajado con Visual Basic esto se les hara muy familiar ya que es casi como manipular Un ListView que utuliza Visual Basic.
El Codigo es bastante sencillo:
//Primero se obtiene la conexión a la base de datos con un código como este:
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection conexion = DriverManager.getConnection(«jdbc:mysql://localhost/prueba»,»usuario»,»clave»);
//El siguiente paso es realizar la consulta y obtener el ResultSet. El código es el siguiente
Statement s = conexion.createStatement();
ResultSet rs = s.executeQuery(«select * from tablaprueba»);
//Para meter los datos en el JTable, usaremos la clase DefaultTableModel. Para ello basta con instanciar el JTable como se muestra en el codigo
DefaultTableModel modelo = new DefaultTableModel();
JTable tabla = new JTable(modelo);
//Ahora sólo hay que rellenar el DefaultTableModel con los datos del ResultSet.
// Creamos las columnas.
modelo.addColumn(«id»);
modelo.addColumn(«nombre»);
modelo.addColumn(«telefono»);
// Recorremos los registros con un ciclo while
while (rs.next())
{
// Se crea un array que será una de las filas de la tabla.
Object [] fila = new Object[3]; // Hay tres columnas en la tabla
// Se rellena cada posición del array con una de las columnas de la tabla en base de datos.
for (int i=0;i<3;i++)
fila[i] = rs.getObject(i+1); // El primer indice en rs es el 1, no el cero, por eso se suma 1.
//No es como en PHP o otros lenguajes donde los indices inician con 0
// Se añade al modelo la fila completa.
modelo.addRow(fila);
}
[/java]
Y esto es todo es muy sencillo. Pero esta forma de hacerlo es una forma manual hay una forma mas facil de hacerlo usando Los Metadatos los cuales nos dan el numero de columnas que contiene el ResultSet, los nombres de los campos etc. Pero no me gusta manejarlo de esa forma ya que no puedo manipular el JTable a mi antojo.
En uno de los siguientes posts explicare los metadatos.
Esta muy bien tu metodo pero tengo ahora un problema :S
Si lo quiero colocar en la parte de abajo de un Frame, como le hago????
Si usas el netbeans solo es cuestion de mover el objeto y ponerlo en un contenedor.
esta muy bien explicado, solo me keda uan duda
en ke parte del codigo se mete?
o se le agrega a algun metodo del jTable
No entiendo tu pregunta spank? en que parte del metodo se mete que?
el codigo puede ser lanzado cuando clickees un boton o cuando el formulario se cargue, no se si a eso te refieras.
Hola, soy programador y de verdad que tengo un lio con esto, anteriormente habia publicado y hecho programas que utilizan este tipo de codigos, pero ahora se me esta repitiendo los datos de las columnas, me explico.
primero me muestra la 1,1 luego la 1,1 y 1,2 luego la 1,1 1,2 y 1,3 y asi sucesivamente.
como encuentro tu pag. interesante decidi hacerte esta pregunta, espero puedas responderme. gracias
el codigo es el siguiente:
ResultSet comando = consulta.executeQuery(«SELECT * FROM Clientes»);
ResultSetMetaData metaDatos = comando.getMetaData();
int numeroColumnas = metaDatos.getColumnCount();
Object[] nombreCampos = new Object[numeroColumnas];
for (int i = 0; i < numeroColumnas; i++) {
nombreCampos[i] = metaDatos.getColumnLabel(i+1);
}
modelo.setColumnIdentifiers(nombreCampos);
while (comando.next()) {
Object [] fila = new Object[numeroColumnas];
for (int j=0;j<numeroColumnas;j++) {
fila[j] = comando.getObject(j+1);
modelo.addRow(fila);
}
comando.close();
}
trata sacando esto del for modelo.addRow(fila);
y comando.close(); fuera del while si te das cuenta en mi codigo el for recorre todas las columnas y agrega el row y continua con el siguiente registro y en cambio en tu codigo no terminas de recorrer todo y agregas un campo por eso es que el recorrido te muestra datos invalidos.
Mmmmm… Ya lo habia probado asi y me muestra todas las lienas, pero me las repite, es decir, si tengo una tabla con 3 columnas y 2 registros me muestra 3 veces el registro 1. Y la idea es vez cada registro.
while (comando.next()) {
Object [] fila = new Object[numeroColumnas];
for (int j=0;j
checa el codigo que puse haber y me comentas