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..