elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  {SOLUCIONADO} JTable me repite datos de un ResultSet {SOLUCIONADO}
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: {SOLUCIONADO} JTable me repite datos de un ResultSet {SOLUCIONADO}  (Leído 6,234 veces)
|Miguel|

Desconectado Desconectado

Mensajes: 217



Ver Perfil
{SOLUCIONADO} JTable me repite datos de un ResultSet {SOLUCIONADO}
« en: 3 Marzo 2012, 16:33 pm »

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:

Código
  1. //**************************************************************************
  2.    static void rellenaJTable(JTable tabla, ResultSet res, String entidad){
  3.        temp = (DefaultTableModel) tabla.getModel(); //Más arriba defino temp asi: static DefaultTableModel temp;
  4.        try{
  5.            res.beforeFirst();
  6.            while(res.next()){                
  7.                Object nuevo[] = rellenaFilaJTable(entidad);
  8.                temp.addRow(nuevo);
  9.            }
  10.        }catch(Exception e){
  11.            excepcion(e, "Error 5. No se ha podido cargar Jtable "+tabla.getName());
  12.        }        
  13.    }
  14.    //**************************************************************************
  15.    static Object[] rellenaFilaJTable(String tabla){
  16.        seleccionaTabla(tabla); //método que carga el ResultSet rs con todos los datos de la tabla que le pase como parámetro
  17.        int longitud = 0;
  18.        try{
  19.            ResultSetMetaData rsmd = rs.getMetaData();
  20.            longitud = rsmd.getColumnCount();
  21.        }catch(Exception e){
  22.            excepcion(e, "Error 6. No se ha podido obtener el número de columnas de '"+tabla+"'.");
  23.        }
  24.        Object[] res = new Object[longitud];
  25.        try{
  26.            while(rs.next()){
  27.                for(int i=1; i<=longitud; i++){
  28.                    try{
  29.                        res[i-1] = rs.getObject(i);
  30.                    }catch(Exception e){
  31.                        excepcion(e, "Error 7. No se han podido rellenar las columnas de '"+tabla+"'; columna "+i+".");
  32.                    }
  33.                }
  34.            }
  35.        }catch(Exception e){excepcion(e);}
  36.        return res;
  37.    }
  38.  

Gracias!


« Última modificación: 3 Marzo 2012, 18:15 pm por |Miguel| » En línea

Proteus1989

Desconectado Desconectado

Mensajes: 184



Ver Perfil WWW
Re: JTable me repite datos de un ResultSet
« Respuesta #1 en: 3 Marzo 2012, 17:47 pm »

Creo que el fallo está en que en rellenaFilaJTable() recorres todo el resultSet y devuelves siempre la ultima fila.


En línea

|Miguel|

Desconectado Desconectado

Mensajes: 217



Ver Perfil
Re: JTable me repite datos de un ResultSet
« Respuesta #2 en: 3 Marzo 2012, 17:53 pm »

Sí, por ahí deben ir los tiros... o eso creo. Tengo esto ahora mismo:
Código
  1. static void rellenaJTable(JTable tabla, ResultSet res, String entidad){
  2.        temp = (DefaultTableModel) tabla.getModel();
  3.        try{
  4.            res.beforeFirst();
  5.            while(res.next()){
  6.                int pos = rs.getRow();
  7.                Object nuevo[] = rellenaFilaJTable(entidad, pos);
  8.                temp.addRow(nuevo);
  9.            }
  10.        }catch(Exception e){
  11.            excepcion(e, "Error 5. No se ha podido cargar Jtable "+tabla.getName());
  12.        }        
  13.    }
  14.    //**************************************************************************
  15.    static Object[] rellenaFilaJTable(String tabla, int elemento){
  16.        seleccionaTabla(tabla);
  17.        int longitud = 0;
  18.        try{
  19.            ResultSetMetaData rsmd = rs.getMetaData();
  20.            longitud = rsmd.getColumnCount();
  21.        }catch(Exception e){
  22.            excepcion(e, "Error 6. No se ha podido obtener el número de columnas de '"+tabla+"'.");
  23.        }
  24.        Object[] res = new Object[longitud];
  25.        try{
  26.            posiciona(rs, elemento);
  27.            for(int i=1; i<=longitud; i++){
  28.                try{
  29.                    System.out.println(rs.getObject(i));
  30.                    res[i-1] = rs.getObject(i);
  31.                }catch(Exception e){
  32.                    excepcion(e, "Error 7. No se han podido rellenar las columnas de '"+tabla+"'; columna "+i+".");
  33.                }
  34.            }
  35.        }catch(Exception e){excepcion(e);}
  36.        return res;
  37.    }
  38.    //**************************************************************************
  39.    static void posiciona(ResultSet result, int vueltas){
  40.        try{
  41.            for(int i=0; i<=vueltas; i++)
  42.                rs.next();
  43.        }catch(Exception e){
  44.            excepcion(e);
  45.        }
  46.    }
  47.  

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 Desconectado

Mensajes: 217



Ver Perfil
Re: JTable me repite datos de un ResultSet {Solución}
« Respuesta #3 en: 3 Marzo 2012, 18:15 pm »

SOLUCIÓN:
Código
  1. //**************************************************************************
  2.    static void rellenaJTable(JTable tabla, ResultSet res, String entidad){
  3.        temp = (DefaultTableModel) tabla.getModel();
  4.        try{
  5.            while(res.next()){
  6.                int pos = res.getRow();
  7.                Object nuevo[] = rellenaFilaJTable(entidad, pos);
  8.                temp.addRow(nuevo);
  9.            }
  10.        }catch(Exception e){
  11.            excepcion(e, "Error 5. No se ha podido cargar Jtable "+tabla.getName());
  12.        }        
  13.    }
  14.    //**************************************************************************
  15.    static Object[] rellenaFilaJTable(String tabla, int elemento){
  16.        seleccionaTabla(tabla);
  17.        int longitud = 0;
  18.        try{
  19.            ResultSetMetaData rsmd = rs.getMetaData();
  20.            longitud = rsmd.getColumnCount();
  21.        }catch(Exception e){
  22.            excepcion(e, "Error 6. No se ha podido obtener el número de columnas de '"+tabla+"'.");
  23.        }
  24.        Object[] res = new Object[longitud];
  25.        try{
  26.            posiciona(rs, elemento);
  27.            for(int i=1; i<=longitud; i++){
  28.                try{
  29.                    res[i-1] = rs.getObject(i);
  30.                }catch(Exception e){
  31.                    excepcion(e, "Error 7. No se han podido rellenar las columnas de '"+tabla+"'; columna "+i+".");
  32.                }
  33.            }
  34.        }catch(Exception e){excepcion(e);}
  35.        return res;
  36.    }
  37.    //**************************************************************************
  38.    static void posiciona(ResultSet result, int vueltas){
  39.        try{
  40.            for(int i=0; i<vueltas; i++)
  41.                rs.next();
  42.        }catch(Exception e){
  43.            excepcion(e);
  44.        }
  45.    }
  46.  

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

Desconectado Desconectado

Mensajes: 184



Ver Perfil WWW
Re: {SOLUCIONADO} JTable me repite datos de un ResultSet {SOLUCIONADO}
« Respuesta #4 en: 3 Marzo 2012, 19:26 pm »

Yo personalmente en vez de devolver un Object[] devolvería un Object[][] y le haría un temp.setData(Object[][])
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[?] JTable getSelectedRow() KeyEvent Retrasado (Solucionado)
Java
AlbertoBSD 3 9,822 Último mensaje 1 Marzo 2009, 12:15 pm
por ~~
[SOLUCIONADO]Cargar JTable con Timer
Java
1mpuls0 2 4,289 Último mensaje 13 Diciembre 2009, 06:12 am
por 1mpuls0
[SOLUCIONADO]Cambiando Titulo en JTable
Java
W0lFy 2 8,218 Último mensaje 26 Mayo 2010, 00:34 am
por W0lFy
quitar filas de un jtable(SOLUCIONADO)
Java
basickdagger 1 8,603 Último mensaje 27 Marzo 2011, 20:02 pm
por basickdagger
[solucionado]Ayuda a la hora de introducir datos en un jtable
Java
juni85 2 3,993 Último mensaje 28 Octubre 2011, 11:03 am
por juni85
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines