leer - odbc java
Manipular una base de datos de Access desde Java sin ODBC (1)
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: here ),
- 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: here ), 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 dependencies . 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 compilación si está agregando los otros cinco (5) archivos JAR. La claseUcanloadDriver
solo se usa en circunstancias especiales y requiere una configuración diferente. Vea la respuesta relacionada here 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 compilación de Java se verá algo como esto
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.
Después de agregar los cinco (5) archivos JAR, la carpeta "Bibliotecas" debería verse más o menos así:
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í:
¡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.