Foros del Web » Programación para mayores de 30 ;) » Java »

Paginar resulset es optimo ?

Estas en el tema de Paginar resulset es optimo ? en el foro de Java en Foros del Web. Hola a todos he utilizado el siguiente codigo para paginar una tabla y mostrar los resultados. Código: public ArrayList ejecutaQueryPaginada(String query, int numPagina, int numRegPagina) ...
  #1 (permalink)  
Antiguo 28/04/2010, 13:43
 
Fecha de Ingreso: diciembre-2008
Mensajes: 71
Antigüedad: 15 años, 4 meses
Puntos: 0
Paginar resulset es optimo ?

Hola a todos he utilizado el siguiente codigo para paginar una tabla y mostrar los resultados.

Código:
public ArrayList ejecutaQueryPaginada(String query, int numPagina, 
                        int numRegPagina) {   
    ArrayList alResultado = new ArrayList();
    Connection conBBDD = null;
    Statement st = null;
    ResultSet rs = null;
    try {                   
        conBBDD=getConnection();                   
        st = conBBDD.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
        st.setFetchSize(numRegPagina);
       
        rs = st.executeQuery(query);

        int fila = numRegPagina * (numPagina - 1) + 1;
        int cont = 1;

        ResultSetMetaData md = rs.getMetaData();
        int numeroColumnas = md.getColumnCount();
        ArrayList alRegistro = new ArrayList(numeroColumnas);

   
        for (int i = 1; i <= numeroColumnas; i++) {
            String nomCol = md.getColumnName(i);
            alRegistro.add(nomCol);
        }

        alResultado.add(alRegistro);

        if (rs.absolute(fila) && numRegPagina > 0) {
            do {
                alRegistro = new ArrayList();
                for (int i = 1; i <= numeroColumnas; i++) {
                    alRegistro.add(rs.getString(i));
                }

                alResultado.add(alRegistro);
                cont++;
               
            }
            while (rs.next() && (cont <= numRegPagina));
        }

        Integer numTuplasTotal = new Integer(0);
        if (rs.last()) { 
                            
            numTuplasTotal = new Integer(rs.getRow());
        }
        alResultado.add(0, numTuplasTotal);       
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if(st!=null) {
            try {
                st.close();
            } catch (SQLException e) {           
                e.printStackTrace();
            }
        }
        if(rs!=null) {               
            try {
                rs.close();
            } catch (SQLException e) {           
                e.printStackTrace();
            }
        }
        if(conBBDD!=null) {
            try {
                conBBDD.close();
            } catch (SQLException e) {               
                e.printStackTrace();
            }
           
        }
    }

    return (alResultado);

}
Mi pregunta es si es mas optimo que realizar la paginacion por medio de un query de la siguiente manera cuando son miles de registros:

Código:
select * from (
      select rownum,nombre,apellido,edad 
       from clientes 
       where fecha between '01/01/2008' and '01/01/2009') a 
where between a.rownum = 40 and a.rownum=60
Actualmente estoy utilizando cuando pagino el resultset por que fue la unica forma que pude realizar para ordenar los datos por las columnas.

Les agradecere sus comentarios, de antemano Gracias..

Última edición por jkintero; 29/04/2010 a las 16:42
  #2 (permalink)  
Antiguo 30/04/2010, 10:35
 
Fecha de Ingreso: diciembre-2008
Mensajes: 71
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Paginar resulset es optimo ?

Hola a todos de nuevo, no hay quien me pueda resolver esta duda que tengo, seria de gran ayuda que me dieran comentarios, quiero saber cual de las dos formas es mas optimos para paginar una tabla que tiene miles de registros.

Claro tomando en cuenta que nunca se van a mostrar todos por el rango de fechas y las condiciones que se necesitan para mostrar la informacion.

De antemano gracias..
  #3 (permalink)  
Antiguo 14/05/2010, 22:44
 
Fecha de Ingreso: diciembre-2008
Mensajes: 71
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Paginar resulset es optimo ?

Disculpen no hay nadie que me pueda ayudar con esta duda, siempre he considerado que este es uno de los foros donde me aclaran las dudas pero nadie se ha animado a contestarme. espero que alguien me pueda contestar.

gracias.
  #4 (permalink)  
Antiguo 15/05/2010, 05:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: Paginar resulset es optimo ?

Es una pregunta abierta y compleja, y en realidad no tiene respuesta segura por que depende de como implemente el driver JDBC los resultsets con scroll.
En algunos casos, puede que lo implemente con la misma sentencia que usas tú :), en otros puede ser totalmente ineficiente y traer todos los datos a memoria antes de paginarlos (algún driver cutre que seguro que hay) .

En definitiva, depende de la implementación del driver. Y antes de que digas el fabricante del driver para ver si lo sabemos, no creo que mucha gente sepa como funcionan internamente los drivers de sus BDD, así que lo mejor sería que tú mismo hicieras pruebas de rendimiento para ver cual te va mejor.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.

Etiquetas: paginar, resulset, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:09.