|
NetBeans: Acceso a base de datos Microsoft Access con aplicación Java mediante Jackcess
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 JavaPara 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:
En su versión 2.0.8 a la fecha de realización de este tutorial:
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: 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:
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:
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 NetBeansEn 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": Seleccionaremos en Categorías la categoría "Java" y en Proyectos el proyecto "Java Application": Introduciremos el nombre del proyecto (por ejemplo AjpdSoftJavaAccess) y la carpeta donde se guardará: De esta forma NetBeans creará los ficheros iniciales necesarios para nuestro proyecto de acceso a base de datos Access con Java: Añadir librerías .jar necesarias para el acceso a base de datos Microsoft Access de forma nativa desde aplicación Java mediante JackcessA 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:
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": La llamaremos "lib": La abriremos y pegaremos los ficheros .jar copiados: 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": Navegaremos hacia la carpeta lib creada anteriormente y seleccionaremos el fichero jackcess-2.0.8.jar: Repetiremos el proceso para los ficheros .jar restantes (commons-lang-2.6.jar, commons-logging-1.2.jar):)
Crear clase Java con métodos de conexión a bd Access, búsqueda, inserciones, eliminaciones y consulta de registrosA 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": Introduciremos un nombre para la clase en "Nombre de Clase", por ejemplo AccesoBaseDatos y pulsaremos en "Terminar": Pegaremos el código fuente siguiente en la clase creada, para poder utilizar la librería Jackcess debemos añadir los imports correspondientes:
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 JavaPara 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: /* * 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:
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 JavaA 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éditosArtículo realizado íntegramente por Alonsojpd miembro fundador del Proyecto AjpdSoft. Anuncios
Enviado el Viernes, 23 enero a las 20:50:36 por ajpdsoft
|
|