Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Access / Base de Datos / Base de Datos / Como paginar registros en Java/Access

Como paginar registros en Java/Access

Autor jc mouse miércoles, mayo 1, 2013

En este post veremos una forma de realizar la paginación en una base de datos Access utilizando el lenguaje de programación java. Pero primero.

¿Qué es paginación de resultados?

Paginar los resultados de una consulta SQL quiere decir mostrar al usuario solo una pequeña parte a la vez en lugar de todos los registros de golpe, al dividir los resultados en varias partes, se forma virtualmente una especie de libro con varias páginas, de ahí el nombre de paginación. Por ejemplo de un resultado de 1000 registros, pueden mostrarse paginas de 100 registros a la vez haciendo un total de 10 paginas, esto hace la navegación más amigable al usuario, optimizamos uso de memoria y tiempo de ejecución.

page db

Aclarado conceptos, vamos a lo bueno, el código.

Utilizaremos 

– Microsoft Access

– Java y Netbeans 7.x

Nivel: Intermedio

Tiempo: 20 minutos

Base de datos: dbpage.accdb

table

La base de datos creada en MS Access, consta de una sola tabla con 4 campos (Id, Nombre, Paterno, Materno), para apreciar mejor la paginación, debes añadir una cantidad considerable de registros, con unos 1000 registros es más que suficiente. Al final del post, tenemos el archivo de base de datos para descarga 🙂

El proyecto: JPage

beans proyect

El proyecto consta de dos clases Paginacion.java, es la clase donde se implementa la conexión a la base de datos y sus respectivos métodos para crear la paginacion.

Tenemos también la clase interfaz.java, como su nombre indica es la interfaz de usuario, es un JFrame que tiene el siguiente diseño:

gui bolivia

La clase Paginacion.java tiene el siguiente código:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
/**
 * @web http://jc-mouse.net/
 * @author Mouse
 */
public class Paginacion {
   //contraseña a la base de datos si es que tuviera, si no se deja vacio
   private String password = "";
   //nombre de la base de datos Acces con extension *.mdb o *.accdb
   private String dbName = "dbpage.accdb";
   //direccion de la base de datos
   private String bd = System.getProperty("user.dir") + "\\" + dbName + ";PWD=" + password;
   //driver para base de datos Access 2000, 2003, 2007, 2010
   private String url = "jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=" + bd;
   private Connection conn = null;

   /**
 * Constructor de clase
 */
   public Paginacion()
   {
    try{
         //obtenemos el driver para Access 
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");         
           //obtenemos la conexión 
           conn = DriverManager.getConnection(url);
         if ( conn!=null ){
           //si la conexion tuvo exito 
           System.out.println("Conexión a base de datos "+bd+". listo");
         }
      }catch(SQLException e){
         System.out.println(e);
      }catch(ClassNotFoundException e){
         System.out.println(e);
      }
   }  

    /* Variables para paginacion */     
    private int numPage=0;
    private int numPages=0;
    private String[] columnames;
    private Object[][] data;

   /**
 * Paginacion
 * @param numRegPagina Numero de registros por pagina
 * @param numPage Numero de Pagina
 * @return Matriz nxm con los registros que corresponde a Numero de Pagina dado por numPage
 */ 
   public Object[][]  getPagina( int numPage, int numRegPagina )
   {        
       //Numero de pagina 
       this.numPage = ( numPage<=1 )? 1 : numPage;        

       //Consulta SQL para obtener todos los registros
       String q  = "SELECT id, nombre, paterno, materno FROM persona "  ;

       Statement st;
       ResultSet rs;

        try {
            st = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY );            
            rs = st.executeQuery( q );

            //Obtiene la cantidad total de registros en la tabla
            rs.last();
            int numReg = rs.getRow();            
            rs.first();         

            //calcula posicion de registro de inicio de paginacion
            int fila = numRegPagina * ( this.numPage - 1 ) + 1;           
            this.numPages = numReg / numRegPagina + ((numReg%numRegPagina > 0)? 1 : 0);

            //obtencion de metadatos de la tabla
            //nombre de las columnas
            ResultSetMetaData md = rs.getMetaData(); 
            int numeroColumnas = md.getColumnCount();//numero de columnas de la tabla 
            //recorre las columnas de la tabla y asigna a array de columnas
            columnames = new String[numeroColumnas];
            for (int i = 1; i <= numeroColumnas; i++) 
            {                
                this.columnames[i-1] = md.getColumnName(i);                
            }
            //-- end metadatos

            //Inicia matriz para los registros
            this.data = new String[ numRegPagina ][ numeroColumnas ];
            int cont = 1;
            // Se mueve a la "fila" indicada y si hay datos llena la matriz con los registros
            if ( rs.absolute( fila ) && numRegPagina > 0 ) 
            {
                int f = 0;
                do {                    
                    for (int i = 1; i <= numeroColumnas; i++ ) 
                    {                        
                        data[f][i-1] = rs.getString( i );
                    }                    
                    f++; cont++;
                }
                while ( rs.next() && ( cont <= numRegPagina ) );
            }                   

        } catch ( Exception e ) {
            System.err.println( "Error: "+ e.getMessage() );
        }  

        return data;
   }

   /**
 * @return String[] Nombres de las columnas
 */   
   public String[] ColumNames()
   {       
       return columnames;
   }

   /**
 * @return Numero de pagina actual de paginacion
 */
   public int getNumPage()
   {
       return this.numPage;
   }

   /**
 * Numero total de paginas 
 */
   public int getNumPages()
   {
       return this.numPages;
   }

}//--> fin clase

Uniendo todo en a interfaz:

Antes

01 package JPage;
02 /**
03  * @web http://jc-mouse.net/
04  * @author Mouse
05  */
06 public class interfaz extends javax.swing.JFrame {
07     
08     /**
09  * Creates new form interfaz
10  */
11     public interfaz() {
12         initComponents();                
13     }
14    
15   ...

Despues:

01 package JPage;
02 import javax.swing.table.DefaultTableModel;
03 /**
04  * @web http://jc-mouse.net/
05  * @author Mouse
06  */
07 public class interfaz extends javax.swing.JFrame {
08 
09     //
10     private Paginacion paginacion = new Paginacion();
11     
12     /**
13  * Creates new form interfaz
14  */
15     public interfaz() {
16         initComponents();        
17         
18         DefaultTableModel datos = new DefaultTableModel(  paginacion.getPagina( 1 , 80 ), paginacion.ColumNames() );
19         this.TABLA.setModel( datos );
20         this.CAJA.setText( paginacion.getNumPage() + " de " + paginacion.getNumPages() );
21         
22     }

Para terminar, añadimos el código para poder navegar entre las diferentes paginas a los JButton ANTERIOR y SIGUIENTE

    private void SIGUIENTEActionPerformed(java.awt.event.ActionEvent evt) {                                          

        DefaultTableModel datos = new DefaultTableModel(  paginacion.getPagina( paginacion.getNumPage()+1 , 80 ), paginacion.ColumNames() );
        this.TABLA.setModel( datos );
        this.CAJA.setText( paginacion.getNumPage() + " de " + paginacion.getNumPages() );

    }                                         

    private void ANTERIORActionPerformed(java.awt.event.ActionEvent evt) {                                         

        DefaultTableModel datos = new DefaultTableModel(  paginacion.getPagina( paginacion.getNumPage()-1 , 80 ), paginacion.ColumNames() );
        this.TABLA.setModel( datos );
        this.CAJA.setText( paginacion.getNumPage() + " de " + paginacion.getNumPages() );  

    }

Ejecuta y tenemos:

paginacion registros

Proyecto completo en el siguiente Link pobre 🙁

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Plantilla android de aviso de página en construcción

Plantilla android de aviso de página en construcción

Cuando tenemos dominio web pero aun no tenemos el contenido listo es común colocar en su lugar una simple web de aviso q...

Capturar foto desde una webcam con Java Media Framework

Capturar foto desde una webcam con Java Media Framework

Como se vio en un post anterior (Capturar video de una webcam con JMF) la captura de un video desde una webcam utilizand...

Reportes y Subreportes con iReport

Reportes y Subreportes con iReport

Cuando creamos reportes en iReport que son un poco complicadas o reportes personalizados, osea, tratando de evitar el cl...

MVC Java y Base de Datos Tutorial

MVC Java y Base de Datos Tutorial

En post pasados [Ejemplo práctico de MVC java Swing con Netbeans, 3 en raya java con MVC y Netbeans , MVC: Modelo, Vista...

Compartir texto plano con un ShareActionProvider en Android

Compartir texto plano con un ShareActionProvider en Android

Un Action Provider es un elemento que habita en la Action Bar para incrementar la accesibilidad de nuestras aplicaciones...

¿Qué es AngularJS?

¿Qué es AngularJS?

Bienvenido a este artículo soy Jose Pedraza Desarrollador Web por más de 7 años, escribiré una serie de artículos para i...

7 comentarios en “Como paginar registros en Java/Access”

  1. JYovan dice:

    Excelente algo como esto es de lo que yo hablaba Saludos 😀

  2. Hans Cerda Woo dice:

    Hola amigo de JC Mouse, esto tambien funcionaria con sql server, con conexion JDBC??

    1. Mouse dice:

      claro que si campeón 😉

  3. AntraxSec dice:

    @Mouse, vos sos groso programando eso es muy bueno por que nos ayudas y de eso se te agradece.
    Anteriormente, te hice la misma consulta. . . .pero wueeee hay te va de nuevo ;).

    Resulta que al momento de “Limpiar y Construir”, tu proyecto JPage se genera la carpeta DIST y en ella JPage.jar el cual al momento de ejecutar no carga la base de datos 🙁 prueba 1;–>>https://qkasbg.bay.livefilestore.com/y2ppwF5-it7_oKGIBeak3cHv6-XuAhG_kU6VHlzEsezRZ9teLZi0Y1iY0uZLt8E2YstMpxJ–xABoAsO4li_Eicef6ivczwLuU_7406oXoCk7s4bQwI5n_x0SQgQ11GIo5e/pruebaJCMOUSE1.jpg?psid=1 y esta es mi consulta ¿Que hago para que funcione la BD?ya Distribuido. haci prueba 2;->>https://qkasbg.bay.livefilestore.com/y2pq8R-qL0gWnNCVPxBUyYFG6lL_8tx5cF5gWZtydjaXHNOTb80ozge9P14wrF6tjwwaJC4UhyGMzyJz5HLuivJ2jMR3c7snUvnjhfLcwqXUivT6Xw6Yp61d605WLsn29H2/pruebaJCMOUSE2.jpg?psid=1 una vez me dijiste que hay que cambiar algo de por aquí prueba 3–>>https://qkasbg.bay.livefilestore.com/y2pfkPvHkcjWhSaS5tRoLN5KtP-btju1Z5DAcIyspsv8ZQ6TPFmya-fjSiiCteFYOIHzeaXWC9pxEW5nYG8N9xJnP-TGdneBFLzFZMYkYBvG9E_fh3HG5ek13n-ZEjt7cQg/pruebaJCMOUSE3.jpg?psid=1 pero nadie sabe ¿Cual es el problema?. Solo hay una persona que lo sabe, y es el mismo creador @Mouse, desde ya Gracias.

    1. Mouse dice:

      🙂 siento no responder con mucha frecuencia pero a veces mandan codigo y este se va directo a spam 🙂 y otra vez 🙂 lo siento, pero no puedo ver las imagenes 🙂

      1. AntraxSec dice:

        Mouse, agradesco mucho que me hayas respondido, y yo sigo teniendo este mismo problema:
        Todo funciona de maravilla con Netbeans y Access pero ya solo con con el .jar que esta en la carpeta “DIST”, ¡Milagrosamente ya no funciona! y surge un extraño error para mi >>jdbc:odbc:Driver=Microsoft Access Driver(*.mdb);DBQ=C:\admin\dist\bd.mdb;<<
        Lo raro es que mi base de datos esta en la carpeta dist.
        ¡AYUDA POR FAVOR!

        1. Mouse dice:

          en la carpeta DIST se colocan las librerías, en programación no existen los milagros todo tiene una causa, el error que tienes es porque no encuentra la base de datos en la dirección que le estas dando, si tu base de datos aparece en la carpeta dist es porque seguramente cambiaste algo en las propiedades del proyecto.

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

El Tangram es un juego chino muy antiguo, esta compuesto por 7 piezas: un paralelogramo (romboide), un cuadrado y 5 triá...

Espresso es un framework de testing propiedad de Google que está dirigido a desarrolladores que creen que las pruebas au...

Harvard WorldMap es una plataforma de mapeo de código abierto en línea, desarrollado por el Centro de Análisis Geográfic...

Realizar pruebas sobre nuestro código nos permiten comprobar su correcto funcionamiento e integración con otros módulos...

Android Bolivia

MAUS