web-dev-qa-db-fra.com

Manipulation d'une base de données Access à partir de Java sans ODBC

Je souhaite manipuler une base de données Microsoft Access (fichier .accdb ou .mdb) à partir de mon projet Java. Je ne souhaite pas utiliser le pont JDBC-ODBC et le pilote Access ODBC de Microsoft parce que:

  • le pont JDBC-ODBC a été supprimé de Java SE 8 et n'est pas pris en charge (ref: ici ),
  • le pont JDBC-ODBC ne fonctionne pas correctement avec le pilote Access ODBC lorsque le texte contient des caractères Unicode dont les points de code sont supérieurs à U + 00FF (ref: ici ). ne pas être capable de gérer des caractères tels que le grec, le russe, le chinois, l'arabe, etc.,
  • le pilote Access ODBC de Microsoft ne fonctionne que sous Windows, et
  • il existe des versions séparées 32 bits et 64 bits du moteur de base de données Access (et du pilote ODBC) qui peuvent constituer un inconvénient pour le déploiement.

J'ai vu d'autres réponses mentionnant un pilote JDBC pour les bases de données Access nommé CanAccess . Comment puis-je configurer mon projet Java pour utiliser cette approche?

(Des réponses suggérant de meilleures méthodes de travail avec les bases de données Access de Java seraient également les bienvenues.)

109
Gord Thompson

CanAccess est un pilote JDBC pur Java qui permet de lire et d'écrire dans des bases de données Access sans utiliser ODBC. Il utilise deux autres packages, Jackcess et HSQLDB , pour effectuer ces tâches. Ce qui suit est un bref aperçu de la façon de le configurer.

Option 1: Utiliser Maven

Si votre projet utilise Maven , vous pouvez simplement inclure UCanAccess via les coordonnées suivantes:

groupId: net.sf.ucanaccess
artifactId: ucanaccess

Ce qui suit est un extrait de pom.xml, vous devrez peut-être mettre à jour le <version> pour obtenir la version la plus récente:

  <dependencies>
    <dependency>
        <groupId>net.sf.ucanaccess</groupId>
        <artifactId>ucanaccess</artifactId>
        <version>4.0.4</version>
    </dependency>
  </dependencies>

Option 2: ajouter manuellement les fichiers JAR à votre projet

Comme mentionné ci-dessus, UCanAccess requiert Jackcess et HSQLDB. Jackcess à son tour a ses propres dépendances . Donc, pour utiliser UCanAccess, vous devez inclure les composants suivants:

CanAccess (ucanaccess-x.x.x.jar)
HSQLDB (hsqldb.jar, version 2.2.5 ou plus récente)
Jackcess (jackcess-2.x.x.jar)
commons-lang (commons-lang-2.6.jar, ou plus récent version 2.x )
commons-logging (commons-logging-1.1.1.jar, ou plus récent version 1.x )

Heureusement, UCanAccess inclut tous les fichiers JAR requis dans son fichier de distribution. Lorsque vous décompressez, vous verrez quelque chose comme

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

Tout ce que vous avez à faire est d’ajouter tous cinq (5) JAR à votre projet.

REMARQUE: Ne pas ajoutez loader/ucanload.jar à votre chemin de construction si vous ajoutez les cinq (5) autres fichiers JAR. La classe UcanloadDriver n'est utilisée que dans des circonstances spéciales et nécessite une configuration différente. Voir la réponse associée ici pour plus de détails.

Eclipse: Cliquez avec le bouton droit de la souris sur le projet dans l'Explorateur de packages et choisissez Build Path > Configure Build Path.... Cliquez sur le bouton "Ajouter des JAR externes ..." pour ajouter chacun des cinq (5) JAR. Lorsque vous avez terminé votre chemin de construction Java devrait ressembler à ceci:

BuildPath.png

NetBeans: Développez l’arborescence de votre projet, cliquez avec le bouton droit sur le dossier "Bibliothèques" et choisissez "Ajouter un fichier JAR/dossier ...", puis sélectionnez Parcourir. dans le fichier JAR.

nbAddJar.png

Après avoir ajouté les cinq (5) fichiers JAR, le dossier "Libraries" devrait ressembler à ceci:

nbLibraries.png

IntelliJ IDEA: Choisissez File > Project Structure... dans le menu principal. Dans le volet "Bibliothèques", cliquez sur le bouton "Ajouter" (+) et ajoutez les cinq (5) fichiers JAR. Une fois que cela est fait, le projet devrait ressembler à ceci:

IntelliJ.png

C'est ça!

Maintenant, "U peut accéder" aux données des fichiers .accdb et .mdb en utilisant un code comme celui-ci

// 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));
}

Divulgation

Au moment de la rédaction de ce Q & R, je n’étais impliqué ni affilié au projet UCanAccess; Je viens de l'utiliser. Je suis depuis devenu un contributeur au projet.

153
Gord Thompson