Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

NetBeans: Acceso a base de datos Microsoft Access con aplicación Java mediante Jackcess
Java


Cómo desarrollar una aplicación Java con acceso a bases de datos Microsoft Access. Usaremos una librería gratuita llamada Jackcess que nos permitirá manipular bases de datos Access sin necesidad de instalar software de terceros en el equipo ni utilizar driver ODBC, accederemos de forma nativa directamente a Access. Mostramos paso a paso cómo recorrer registros de Access, hacer inserciones y eliminaciones. Incluimos el código fuente completo de la apliación Java de ejemplo.



Descarga de librerías Java Jackcess, Apache Commons Lang, Apache Commons Logging para acceso a base de datos Microsoft Access mediante Java

Para desarrollar una aplicación Java que acceda a una base de datos Microsoft Access de forma nativa (sin instalar nada en el equipo y sin usar ODBC), podremos emplear la librería gratuita Jackcess. Dicha librería podremos descargarla de su web oficial de descarga:

  • http://sourceforge.net/projects/jackcess/files

En su versión 2.0.8 a la fecha de realización de este tutorial:

  • http://sourceforge.net/projects/jackcess/files/jackcess/2.0.8

Descargaremos el fichero jackcess-2.0.8.jar que será el que utilicemos para acceso a bases de datos Access desde nuestra aplicación Java:

Descarga de librerías Java Jackcess, Apache Commons Lang, Apache Commons Logging para acceso a base de datos Microsoft Access mediante Java

Jackcess necesita dos librerías más de propósito general, la primera, Apache Commons Logging (commons-logging-1.2.jar), la podremos descargar de su web oficial:

  • http://commons.apache.org/proper/commons-logging/download_logging.cgi

Descarga de librerías Java Jackcess, Apache Commons Lang, Apache Commons Logging para acceso a base de datos Microsoft Access mediante Java

Y la segunda, Apache Commons Lang (commons-lang-2.6.jar), también la podemos descargar de su web oficial. Para el caso de Commons Lang, Jackcess 2.0.8 necesita la versión 2.6, la actual 3.3.2 de Commons Lang no es compatible con Jackcess 2.0.8. Por lo tanto descargaremos la versión 2.6 disponible en la misma URL:

  • http://commons.apache.org/proper/commons-lang/download_lang.cgi

Descarga de librerías Java Jackcess, Apache Commons Lang, Apache Commons Logging para acceso a base de datos Microsoft Access mediante Java

En la descarga gratuita de la aplicación de ejemplo completa en Java con acceso a base de datos Access incluimos dicha librería jackcess-2.0.8.jar y el resto de librerías necesarias:

 

Crear aplicación Java en el IDE NetBeans

En primer lugar necesitaremos disponer del IDE de desarrollo NetBeans, a continuación mostramos un tutorial donde explicamos paso a paso cómo descargarlo e instalarlo:

Una vez instalado, para crear una nueva aplicación Java abriremos NetBeans y pulsaremos en el menú "Archivo" - "Proyecto Nuevo":

Crear aplicación Java en el IDE NetBeans

Seleccionaremos en Categorías la categoría "Java" y en Proyectos el proyecto "Java Application":

Crear aplicación Java en el IDE NetBeans

Introduciremos el nombre del proyecto (por ejemplo AjpdSoftJavaAccess) y la carpeta donde se guardará:

Crear aplicación Java en el IDE NetBeans

De esta forma NetBeans creará los ficheros iniciales necesarios para nuestro proyecto de acceso a base de datos Access con Java:

Crear aplicación Java en el IDE NetBeans

 

Añadir librerías .jar necesarias para el acceso a base de datos Microsoft Access de forma nativa desde aplicación Java mediante Jackcess

A continuación explicamos cómo añadir las librerías .jar necesarias para la correcta ejecución de la aplicación Java con acceso a base de datos Access. Para ello, una vez descargadas como indicamos aquí, copiaremos todos los ficheros .jar descargados:

  • jackcess-2.0.8.jar
  • commons-lang-2.6.jar
  • commons-logging-1.2.jar

Añadir librerías .jar necesarias para el acceso a base de datos Microsoft Access de forma nativa desde aplicación Java mediante Jackcess

Con el Explorador de Windows accederemos a la carpeta del proyecto creado aquí, crearemos una nueva carpeta dentro de la del proyecto, para ello pulsaremos con el botón derecho "Nuevo" - "Carpeta":

Añadir librerías .jar necesarias para el acceso a base de datos Microsoft Access de forma nativa desde aplicación Java mediante Jackcess

La llamaremos "lib":

Añadir librerías .jar necesarias para el acceso a base de datos Microsoft Access de forma nativa desde aplicación Java mediante Jackcess

La abriremos y pegaremos los ficheros .jar copiados:

Añadir librerías .jar necesarias para el acceso a base de datos Microsoft Access de forma nativa desde aplicación Java mediante Jackcess

Desde el proyecto NetBeans, pulsando con el botón derecho del ratón sobre "Libraries", nos mostrará un menú emergente, en este menú pulsaremos en "Agregar archivo JAR/Carpeta":

Añadir librerías .jar necesarias para el acceso a base de datos Microsoft Access de forma nativa desde aplicación Java mediante Jackcess

Navegaremos hacia la carpeta lib creada anteriormente y seleccionaremos el fichero jackcess-2.0.8.jar:

Añadir librerías .jar necesarias para el acceso a base de datos Microsoft Access de forma nativa desde aplicación Java mediante Jackcess

Repetiremos el proceso para los ficheros .jar restantes (commons-lang-2.6.jar, commons-logging-1.2.jar):)

Añadir librerías .jar necesarias para el acceso a base de datos Microsoft Access de forma nativa desde aplicación Java mediante Jackcess

Añadir librerías .jar necesarias para el acceso a base de datos Microsoft Access de forma nativa desde aplicación Java mediante Jackcess

 

Crear clase Java con métodos de conexión a bd Access, búsqueda, inserciones, eliminaciones y consulta de registros

A continuación crearemos una clase en nuestro proyecto Java que contendrá todos los métodos necesarios para conectar con la base de datos Access, recorrer registros, buscar, eliminar e insertar. Para ello, en NetBeans, pulsaremos con el botón derecho del ratón sobre el paquete, en nuestro caso "ajpdsoftjavaaccess", en el menú emergente seleccionaremos "Nuevo" - "Java Class":

Crear clase Java con métodos de conexión a bd Access, búsqueda, inserciones, eliminaciones y consulta de registros

Introduciremos un nombre para la clase en "Nombre de Clase", por ejemplo AccesoBaseDatos y pulsaremos en "Terminar":

Crear clase Java con métodos de conexión a bd Access, búsqueda, inserciones, eliminaciones y consulta de registros

Pegaremos el código fuente siguiente en la clase creada, para poder utilizar la librería Jackcess debemos añadir los imports correspondientes:

import com.healthmarketscience.jackcess.Cursor;
import com.healthmarketscience.jackcess.CursorBuilder;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.Row;
import com.healthmarketscience.jackcess.Table;
import java.io.File;

Crear clase Java con métodos de conexión a bd Access, búsqueda, inserciones, eliminaciones y consulta de registros

El código fuente completo de la clase AccesoBaseDatos:

/*
 * Acceso base datos Microsoft Access
 * mediante Jackcess
 */
package ajpdsoftjavaaccess;
import com.healthmarketscience.jackcess.Cursor;
import com.healthmarketscience.jackcess.CursorBuilder;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DatabaseBuilder;
import com.healthmarketscience.jackcess.Row;
import com.healthmarketscience.jackcess.Table;
import java.io.File;
/**
 * @author www.ajpdsoft.com
 */
public class AccesoBaseDatos 
{    
    private String rutaBD;
    private Database BDAccess;
    
    public AccesoBaseDatos(String rutaBD)
    {        
        this.rutaBD = rutaBD;                
    }
    
    public boolean conectarBD ()
    {
        try 
        {
            BDAccess = DatabaseBuilder.open(new File(rutaBD));     
            return true;
        } 
        catch (Exception e) 
        {            
            System.out.println ("Error al abrir BD [" + rutaBD + "]: " +
                    e.getMessage());
            return false;
        }     
    }
    
    
    //Devuelve el valor de un campo de una tabla según un filtro
    public String buscarRegistroValor(String nombreTabla, String campo, 
            Object filtro, String campoDevuelto)
    {
        String valor = "";
        try
        {
            Table tabla = BDAccess.getTable(nombreTabla);
            Cursor cursor = CursorBuilder.createCursor(tabla);
            for (Row registro : cursor.newIterable().addMatchPattern(campo, filtro)) 
            {
                valor = registro.get(campoDevuelto).toString();                    
            }
            return valor;
        } 
        catch (Exception e) 
        {
            System.out.println ("Error obtener valor de tabla [" + nombreTabla + "]: " +
                    e.getMessage());            
            return  "";
        }     
    }    
    
    //Devuelve las filas de una tabla
    public void mostrarRegistrosTabla(String nombreTabla, String campo1, 
            String campo2, String campo3, String campo4, String campo5)
    {
        try
        {
            Table tabla = BDAccess.getTable(nombreTabla);
            for(Row registro : tabla) 
            {
                System.out.println("-------------------------------------");
                if (!campo1.equalsIgnoreCase(""))
                    System.out.println(campo1 + ": " + registro.get(campo1));
                if (!campo2.equalsIgnoreCase(""))
                    System.out.println(campo2 + ": " + registro.get(campo2));
                if (!campo3.equalsIgnoreCase(""))
                    System.out.println(campo3  + ": " + registro.get(campo3));
                if (!campo4.equalsIgnoreCase(""))
                    System.out.println(campo4  + ": " + registro.get(campo4));
                if (!campo5.equalsIgnoreCase(""))
                    System.out.println(campo5  + ": " + registro.get(campo5));                    
            }
        } 
        catch (Exception e) 
        {
            System.out.println ("Error al mostrar tabla [" + nombreTabla + "]: " +
                    e.getMessage());            
        }     
    }
    
    //Devuelve las filas de una tabla con filtro de otra tabla para 
    //mostrar campo foráneo
    //Utilizo Sobrecarga
    public void mostrarRegistrosTabla(String nombreTabla, 
            String nombreTablaSecundaria, String campoFiltrarTabla1, 
            String campoFiltrarTabla2, String campoMostrarTabla2, String campo1, 
            String campo2, String campo3, String campo4, String campo5)
    {
        try
        {
            Table tabla = BDAccess.getTable(nombreTabla);
            for(Row registro : tabla) 
            {
                System.out.println("-------------------------------------");
                if (!campo1.equalsIgnoreCase(""))
                    System.out.println(campo1 + ": " + registro.get(campo1));
                if (!campo2.equalsIgnoreCase(""))
                    System.out.println(campo2 + ": " + registro.get(campo2));
                if (!campo3.equalsIgnoreCase(""))
                    System.out.println(campo3  + ": " + registro.get(campo3));
                if (!campo4.equalsIgnoreCase(""))
                    System.out.println(campo4  + ": " + registro.get(campo4));
                if (!campo5.equalsIgnoreCase(""))
                    System.out.println(campo5  + ": " + registro.get(campo5)); 
                if (!campoFiltrarTabla1.equalsIgnoreCase("") &
                        (!campoFiltrarTabla2.equalsIgnoreCase("")))
                    System.out.println(campoMostrarTabla2  + ": " + 
                          buscarRegistroValor(nombreTablaSecundaria, 
                                  campoFiltrarTabla2, 
                                  registro.get(campoFiltrarTabla2),
                                  campoMostrarTabla2));                                             
            }
        } 
        catch (Exception e) 
        {
            System.out.println ("Error al mostrar tabla [" + nombreTabla + "]: " +
                    e.getMessage());            
        }     
    }

    
    //Insertar registro en tabla Cliente
    public void insertarCliente (String nombreTabla, String idCliente, 
            String NombreCompania, String NombreContacto, String CargoContacto, 
            String Direccion, String Ciudad, String Region, String CP, 
            String Pais, String Telefono, String Fax)
    {
        try
        {
            Table table = BDAccess.getTable(nombreTabla);
            table.addRow(idCliente, NombreCompania, NombreContacto, 
                CargoContacto, Direccion, Ciudad, Region, CP, 
                Pais, Telefono, Fax);
        }
        catch (Exception e)
        {
            System.out.println ("Error al insertar registro en tabla [" + 
                    nombreTabla + "]: " + e.getMessage());                        
        }
    }
    
    //Eliminar registro de tabla con condición de filtro
    //es importante establecer una condición única para eliminar
    //un único registro dado que si no eliminará todos los que cumplan la condición
    public void eliminarRegistroTabla (String nombreTabla, 
            String campo, String valorFiltro)
    {
        try 
        {            
            Table tabla = BDAccess.getTable(nombreTabla);
            Cursor cursor = CursorBuilder.createCursor(tabla);
            for (Row registro : cursor.newIterable().addMatchPattern(campo, valorFiltro)) 
            {
                tabla.deleteRow(registro);
            }
        }
        catch (Exception e)
        {
           System.out.println ("Error al eliminar registro en tabla [" + 
                   nombreTabla + "]: " + e.getMessage()); 
        }          
    }
    
    //Método para actualizar el valor de los campos 
    //de una tabla que cumplan un determinado filtro
    public void actualizarCampoTabla(String nombreTabla, String campo, 
            Object filtro, String nuevoValor)
    {
        try 
        {            
            Table tabla = BDAccess.getTable(nombreTabla);
            Cursor cursor = CursorBuilder.createCursor(tabla);
            for (Row registro : cursor.newIterable().addMatchPattern(campo, filtro)) 
            {
                registro.put(campo, nuevoValor);
                tabla.updateRow(registro);
            }
        }
        catch (Exception e)
        {
           System.out.println ("Error al actualizar tabla [" + nombreTabla + "]: " +
                    e.getMessage()); 
        }    
    }
    
    //Devuelve el número de registros de una tabla
    public int numRegistros(String nombreTabla)
    {
        try
        {
            Table tabla = BDAccess.getTable(nombreTabla);
            return tabla.getRowCount();
        }
        catch (Exception e)
        {
            System.out.println ("Error al contar registros de [" + nombreTabla + "]: " +
                e.getMessage()); 
            return 0;
            
        }
    }
    
    //Cerrar la conexión a la base de datos
    public void desconectarBD ()
    {
        try
        {
            BDAccess.close();
        }
        catch (Exception e)
        {
            System.out.println ("Error al cerrar BD [" + rutaBD + "]: " +
                    e.getMessage()); 
        }
    }
}

Como podemos observar en el código de la clase, en el constructor le pasamos como parámetro la ruta de la base de datos Access, hay un método conectarBD para conectar con la base de datos, otro para cerrar la conexión desconectarBD y otros métodos para buscar registros, insertar, eliminar, listar, etc.

Probar clase Java de acceso a base de datos Microsoft Access y compilar aplicación Java

Para probar cada uno de los métodos de la clase anterior de acceso a base de datos Access, desde la clase principal main de nuestra aplicación Java, añadiremos el siguiente código:

Probar clase Java de acceso a base de datos Microsoft Access y compilar aplicación Java

/*
 * AjpdSoft Acceso a Access con Java
 */
package ajpdsoftjavaaccess;

/**
 *
 * @author www.ajpdsoft.com
 */
public class AjpdSoftJavaAccess 
{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
    {
        // TODO code application logic here
        final String ficheroAccess = ".Neptuno.mdb";        
        
        AccesoBaseDatos accesoMDB = new AccesoBaseDatos(ficheroAccess);
        if (accesoMDB.conectarBD())
        {
            //Prueba de inserción de registro en tabla Clientes
            System.out.println("Número registros tabla Clientes: " + 
                    accesoMDB.numRegistros("Clientes"));
            accesoMDB.insertarCliente("Clientes", "ALON00", "AjpdSoft", 
                    "Contacto A", "Cargo Contacto", "Calle",
                    "Población", "Murcia", "99600", "España",
                    "968333666", "96855444");                        

            //Prueba obtener número de registros de una tabla
            System.out.println("Número registros tabla Clientes " +
                    "(después de inserción): " + 
                    accesoMDB.numRegistros("Clientes"));
            
            //Prueba para eliminar un registro de la tabla Clientes
            accesoMDB.eliminarRegistroTabla("Clientes", "IdCliente", "ALON00");
            System.out.println("Número registros tabla Clientes " +
                    "(después de eliminación): " + 
                    accesoMDB.numRegistros("Clientes"));            
            
            //Prueba de modificación de campo de registro existente 
            //filtrando por valor            
            accesoMDB.actualizarCampoTabla("Clientes", "NombreContacto", 
                    "Paula Parente", "Alonso Javier");

            //Prueba para mostrar los Clientes
            accesoMDB.mostrarRegistrosTabla("Clientes", "NombreCompañía", 
                    "NombreContacto", "País", "Teléfono", "");
            System.out.println("Número registros tabla Clientes: " + 
                    accesoMDB.numRegistros("Clientes"));
            
            //Prueba para mosrar los Productos
            accesoMDB.mostrarRegistrosTabla("Productos", "NombreProducto", 
                    "PrecioUnidad", "IdProveedor", "", "");            
            System.out.println("Número registros tabla Productos: " + 
                    accesoMDB.numRegistros("Productos"));     
            
            //Para mostrar el nombre del proveedor en los productos,
            //puesto que Jackcess no permite ejecutar consultas SQL 
            //(como indica su documentación) usaremos dos métodos en la clase
            //con el método sobrecargado mostrarRegistrosTabla
            accesoMDB.mostrarRegistrosTabla("Productos", "Proveedores", 
                    "IdProveedor", "IdProveedor", "NombreCompañía", "NombreProducto", 
                    "PrecioUnidad", "", "", "");                              
            System.out.println("Número registros tabla Productos: " + 
                    accesoMDB.numRegistros("Productos"));
            
            //Cerramos la conexión con la base de datos
            accesoMDB.desconectarBD();
        }
    }            
}

En este código Java básicamente referenciamos e instanciamos la clase AccesoBaseDatos con:

AccesoBaseDatos accesoMDB = new AccesoBaseDatos(ficheroAccess);

Y utilizamos todos sus métodos para realizar la verificación, mostrando los resultados por pantalla.

 

Código fuente gratuito de aplicación de ejemplo AjpdSoft Acceso Access con Java

A continuación indicamos la descarga gratuita del código fuente completo en Java de la aplicación AjpdSoft Acceso Access con Java, aplicación de ejemplo de este tutorial que incluye la librería Jackcess y una base de datos mdb de ejemplo (neptuno.mdb):

 

Artículos relacionados

Créditos

Artículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft.

Artículo en inglés.


Anuncios


Enviado el Viernes, 23 enero a las 20:50:36 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A