Foro de elhacker.net

Programación => Java => Mensaje iniciado por: puntoBat en 23 Mayo 2014, 13:51 pm



Título: jTable y regitros de Bases de Datos
Publicado por: puntoBat en 23 Mayo 2014, 13:51 pm
ola muy buenas, tengo un problema y estoy atascado en mi codigo.

La cuestion es rellenar un jTable que tiene 5 columnas desde una base de datos, facil no!!
el problema es que tengo que cojer los datos de 3 tablas distintas y poner sus datos en distintas columnas,

Comento el codigo y os lo explico un poco

mi codigo es este:

Código:
try {
       
        ps = cn.prepareStatement(producttab);  //Conexion
        rs= ps.executeQuery(producttab);        //Resultset
   
    int numFilas = 0;
    int numColumnas = rs.getMetaData().getColumnCount(); 
               
    while(rs.next()) {
        numFilas++;
    }
   
    filas = new Object [numFilas] [numColumnas]; 
   
    rs.beforeFirst();
   
   
    int contadorTmp = 0;
   
    while (rs.next()) {
   
 //aqui rellenamos el objeto fila el cual rellenara la tabla, el contador Tmp pasara por todas las filas y el siguientenumero seran las columnas de nuestro jtable el rs.String() se enecarga de sacar el dato de la columna que le indiquemos, este caso el 19 y asignarlo a la posicion de fila[][]
 
    filas[contadorTmp][0] = rs.getString(19);   
                                                                   
    filas[contadorTmp][2] = rs.getString(14);
                                                               
    filas[contadorTmp][4] = rs.getString(4);
 
    System.out.println("ref,nom,prec"+filas);
    contadorTmp++;
    }
    ps.close();
    rs.close();
   
//ahora rellenaremos la columna 1 del jTable, estos datos estan en otra tabla de nuestra base de datos, por lo que el rs o resultset hay que cambiarle la direccion sql de la tabla donde estara.   
   
    ps = cn.prepareStatement(lang);               
    rs = ps.executeQuery(lang);
   
   
    contadorTmp = 0;
   
    while(rs.next()) {
   
   
    filas[contadorTmp][1] = rs.getString(10);  //aqui esta el error
   
    contadorTmp++;
    System.out.println("nombre articulo"+filas);
    }


El error que me sale es: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 38

Gracias de antemano.
PD:Si hubiera que modificar todo el codigo no me importaria.


Título: Re: jTable y regitros de Bases de Datos
Publicado por: Migugami en 23 Mayo 2014, 16:06 pm
ArrayIndexOutOfBoundsException lo lanza la máquina virtual cuando se intenta acceder a un índice inexistente en un array. Si te fijas en el stacktrace, que es el rastreo de pila de tu aplicación, te mostrará la línea en donde ha ocurrido la excepción y nada más tienes que indentificar el fallo y corregirlo.


Título: Re: jTable y regitros de Bases de Datos
Publicado por: puntoBat en 23 Mayo 2014, 17:51 pm
ArrayIndexOutOfBoundsException lo lanza la máquina virtual cuando se intenta acceder a un índice inexistente en un array. Si te fijas en el stacktrace, que es el rastreo de pila de tu aplicación, te mostrará la línea en donde ha ocurrido la excepción y nada más tienes que indentificar el fallo y corregirlo.

Vale he colocado un:
Código:
catch(ArrayIndexOutOfBoundsException e) { JOptionPane.ShowMessageDialog(null,e) }

Ahora me salta un error que dice: java.lang.ArrayIndexOutOfBoundsException:38

Pero por lo menos ya se cargan los datos de las dos tablas de mi base de datos
Muxax gracias, pero que significaria ese error o donde puedo mirarlo


Título: Re: jTable y regitros de Bases de Datos
Publicado por: puntoBat en 23 Mayo 2014, 18:09 pm
Vale ya me funciona, en el mensaje de error ponia el numero 38.

Este numero corresponde al numero de registros que tengo creados en mi base de datos, osea 38 articulos.
En algunas tablas donde tengo que sacar datos estos registros se repiten, por lo que el articulo aparece 3 veces repetido con y con el mismo id,

Solucion:

Filtrar la repeticion de los articulos o sus id´s.

Codigo:

Código:
ps= cn.prepareStatement(stockavailable);
    rs = ps.executeQuery(stockavailable);
    
    contadorTmp = 0;
    comparador = 0;
    
    while(rs.next()) {
    
    if(rs.getInt(2) != comparador) {   // es necesario comparar para que no se repitanl los id`s y con ello 3 nombres
    
    filas[contadorTmp][3]=rs.getString(6);
    
    contadorTmp++;
    comparador = rs.getInt(2); //Aquí le damos el valor del id que esta en la columna 2 de la base de datos, por lo que cuando vuelva a realizar el if sera igual que el siguiente id de la columna 2 y no dejara realizarlo, y pasara al siguiente id
    }

 }

Espero que le sirva a alguien y recuerden comentar su codigo para que vosotros mismos lo podáis entender en caso de fallos y problemas