Autor
|
Tema: {SOLUCIONADO} JTable me repite datos de un ResultSet {SOLUCIONADO} (Leído 6,484 veces)
|
|Miguel|
Desconectado
Mensajes: 217
|
Hola, buenas a todos. A ver si me podéis echar un cable con esto... vamos a ver, tengo un JTable que quiero llenar con los datos obtenidos de un ResultSet. Hasta ahí todo iba perfecto, pero se me ha ocurrido la genial idea (o no tan genial) de intentar usar un método que me rellene cualquier JTable con cualquier ResultSet... (independientemente de la estructura de la tabla/s que formen el ResultSet)... Y el resultado es que tengo una Tabla en la Base de Datos con 2 columnas y 3 datos (id y nombre) y lo que he hecho me saca el último dato de la tabla 3 veces. Aquí os dejo el código de los métodos que uso para llenar el JTable: //************************************************************************** temp = (DefaultTableModel) tabla. getModel(); //Más arriba defino temp asi: static DefaultTableModel temp; try{ res.beforeFirst(); while(res.next()){ Object nuevo [] = rellenaFilaJTable (entidad ); temp.addRow(nuevo); } excepcion(e, "Error 5. No se ha podido cargar Jtable "+tabla.getName()); } } //************************************************************************** seleccionaTabla(tabla); //método que carga el ResultSet rs con todos los datos de la tabla que le pase como parámetro int longitud = 0; try{ longitud = rsmd.getColumnCount(); excepcion(e, "Error 6. No se ha podido obtener el número de columnas de '"+tabla+"'."); } try{ while(rs.next()){ for(int i=1; i<=longitud; i++){ try{ res[i-1] = rs.getObject(i); excepcion(e, "Error 7. No se han podido rellenar las columnas de '"+tabla+"'; columna "+i+"."); } } } return res; }
Gracias!
|
|
« Última modificación: 3 Marzo 2012, 18:15 pm por |Miguel| »
|
En línea
|
|
|
|
Proteus1989
|
Creo que el fallo está en que en rellenaFilaJTable() recorres todo el resultSet y devuelves siempre la ultima fila.
|
|
|
En línea
|
|
|
|
|Miguel|
Desconectado
Mensajes: 217
|
Sí, por ahí deben ir los tiros... o eso creo. Tengo esto ahora mismo: try{ res.beforeFirst(); while(res.next()){ int pos = rs.getRow(); Object nuevo [] = rellenaFilaJTable (entidad, pos ); temp.addRow(nuevo); } excepcion(e, "Error 5. No se ha podido cargar Jtable "+tabla.getName()); } } //************************************************************************** static Object[] rellenaFilaJTable (String tabla, int elemento ){ seleccionaTabla(tabla); int longitud = 0; try{ longitud = rsmd.getColumnCount(); excepcion(e, "Error 6. No se ha podido obtener el número de columnas de '"+tabla+"'."); } try{ posiciona(rs, elemento); for(int i=1; i<=longitud; i++){ try{ System. out. println(rs. getObject(i )); res[i-1] = rs.getObject(i); excepcion(e, "Error 7. No se han podido rellenar las columnas de '"+tabla+"'; columna "+i+"."); } } return res; } //************************************************************************** static void posiciona (ResultSet result, int vueltas ){ try{ for(int i=0; i<=vueltas; i++) rs.next(); excepcion(e); } }
Esto me dibuja el JTable con tres filas, pero rellena solo dos. Es decir, me muestra los datos 2º y 3º, pero se come el primero y me salta la excepción del "Error7", dos veces (una por cada columna)... voy a ver los índices porque supongo que el fallo será ahí.
|
|
|
En línea
|
|
|
|
|Miguel|
Desconectado
Mensajes: 217
|
SOLUCIÓN: //************************************************************************** try{ while(res.next()){ int pos = res.getRow(); Object nuevo [] = rellenaFilaJTable (entidad, pos ); temp.addRow(nuevo); } excepcion(e, "Error 5. No se ha podido cargar Jtable "+tabla.getName()); } } //************************************************************************** static Object[] rellenaFilaJTable (String tabla, int elemento ){ seleccionaTabla(tabla); int longitud = 0; try{ longitud = rsmd.getColumnCount(); excepcion(e, "Error 6. No se ha podido obtener el número de columnas de '"+tabla+"'."); } try{ posiciona(rs, elemento); for(int i=1; i<=longitud; i++){ try{ res[i-1] = rs.getObject(i); excepcion(e, "Error 7. No se han podido rellenar las columnas de '"+tabla+"'; columna "+i+"."); } } return res; } //************************************************************************** static void posiciona (ResultSet result, int vueltas ){ try{ for(int i=0; i<vueltas; i++) rs.next(); excepcion(e); } }
Explicaría cuál ha sido mi error y cómo lo he solucionado... pero sinceramente no tengo ni idea. He dado unos cuantos ctrl+Z para arreglar una cosa que había estropeado y ahora funciona bien... XD Gracias a todos.
|
|
|
En línea
|
|
|
|
Proteus1989
|
Yo personalmente en vez de devolver un Object[] devolvería un Object[][] y le haría un temp.setData(Object[][])
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[?] JTable getSelectedRow() KeyEvent Retrasado (Solucionado)
Java
|
AlbertoBSD
|
3
|
10,010
|
1 Marzo 2009, 12:15 pm
por ~~
|
|
|
[SOLUCIONADO]Cargar JTable con Timer
Java
|
1mpuls0
|
2
|
4,473
|
13 Diciembre 2009, 06:12 am
por 1mpuls0
|
|
|
[SOLUCIONADO]Cambiando Titulo en JTable
Java
|
W0lFy
|
2
|
8,429
|
26 Mayo 2010, 00:34 am
por W0lFy
|
|
|
quitar filas de un jtable(SOLUCIONADO)
Java
|
basickdagger
|
1
|
8,796
|
27 Marzo 2011, 20:02 pm
por basickdagger
|
|
|
[solucionado]Ayuda a la hora de introducir datos en un jtable
Java
|
juni85
|
2
|
4,226
|
28 Octubre 2011, 11:03 am
por juni85
|
|