Manipular una base de datos de Access desde Java sin ODBC

Quiero manipular una base de datos de Microsoft Access (archivo .accdb o .mdb) de mi proyecto Java. No quiero usar el puente JDBC-ODBC y el controlador Access ODBC de Microsoft porque:

  • el puente JDBC-ODBC se ha eliminado de Java SE 8 y no es compatible (ref: aquí ),
  • el puente JDBC-ODBC no funciona correctamente con el controlador Access ODBC cuando el texto incluye caracteres Unicode con puntos de código superiores a U + 00FF (ref: aquí ), por lo que dicha configuración no podría manejar caracteres como el griego, el ruso y el chino. , Árabe, etc.,
  • el controlador Access ODBC de Microsoft solo funciona en Windows, y
  • hay versiones separadas de 32 bits y 64 bits del Motor de base de datos de Access (y el controlador ODBC) que pueden ser una molestia para la implementación.

He visto otras respuestas que mencionan un controlador JDBC para bases de datos de Access llamado UCanAccess . ¿Cómo puedo configurar mi proyecto Java para usar este enfoque?

(Las respuestas que sugieran mejores formas de trabajar con las bases de datos de Access de Java también serían bienvenidas).

UCanAccess es un controlador Java JDBC puro que nos permite leer y escribir en bases de datos de Access sin usar ODBC. Utiliza otros dos paquetes, Jackcess y HSQLDB , para realizar estas tareas. La siguiente es una breve descripción de cómo configurarlo.

Opción 1: usar Maven

Si su proyecto utiliza Maven , simplemente puede incluir UCanAccess a través de las siguientes coordenadas:

ID de grupo: net.sf.ucanaccess
artefacto: ucanaccess

Opción 2: agregar manualmente los JAR a su proyecto

Como se mencionó anteriormente, UCanAccess requiere Jackcess y HSQLDB. Jackcess a su vez tiene sus propias dependencias . Entonces, para usar UCanAccess, deberá incluir los siguientes componentes:

UCanAccess (ucanaccess-xxxjar)
HSQLDB (hsqldb.jar, versión 2.2.5 o posterior)
Jackcess (jackcess-2.xxjar)
commons-lang (commons-lang-2.6.jar, o versión 2.x más nueva)
commons-logging (commons-logging-1.1.1.jar, o versión 1.x más reciente )

Afortunadamente, UCanAccess incluye todos los archivos JAR necesarios en su archivo de distribución. Cuando lo descomprimes verás algo así como

ucanaccess-4.0.1.jar /lib/ commons-lang-2.6.jar commons-logging-1.1.1.jar hsqldb.jar jackcess-2.1.6.jar 

Todo lo que necesita hacer es agregar los cinco (5) JAR a su proyecto.

NOTA: No agregue loader/ucanload.jar a su ruta de comstackción si está agregando los otros cinco (5) archivos JAR. La clase UcanloadDriver solo se usa en circunstancias especiales y requiere una configuración diferente. Vea la respuesta relacionada aquí para más detalles.

Eclipse: haga clic con el botón derecho en el proyecto en Package Explorer y elija Build Path > Configure Build Path... Haga clic en el botón “Agregar JAR externos …” para agregar cada uno de los cinco (5) JAR. Cuando hayas terminado, tu ruta de comstackción de Java se verá algo como esto

BuildPath.png

NetBeans: amplíe la vista de árbol para su proyecto, haga clic derecho en la carpeta “Bibliotecas” y seleccione “Agregar JAR / Carpeta …”, luego busque el archivo JAR.

nbAddJar.png

Después de agregar los cinco (5) archivos JAR, la carpeta “Bibliotecas” debería verse más o menos así:

nbLibraries.png

IntelliJ IDEA: elija File > Project Structure... desde el menú principal. En el panel “Bibliotecas”, haga clic en el botón “Agregar” ( + ) y agregue los cinco (5) archivos JAR. Una vez hecho esto, el proyecto debería verse más o menos así:

IntelliJ.png

¡Eso es!

Ahora los datos “U puede acceder” en archivos .accdb y .mdb usando un código como este

 // assumes... // import java.sql.*; Connection conn=DriverManager.getConnection( "jdbc:ucanaccess://C:/__tmp/test/zzz.accdb"); Statement s = conn.createStatement(); ResultSet rs = s.executeQuery("SELECT [LastName] FROM [Clients]"); while (rs.next()) { System.out.println(rs.getString(1)); } 

Revelación

En el momento de escribir este Q & A, no participé ni me afilié al proyecto UCanAccess; Lo acabo de usar. Desde entonces, me he convertido en colaborador del proyecto.