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

114

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 ODBC Access de Microsoft car:

  • le JDBC-ODBC Bridge a été supprimé de Java SE 8 et n'est pas pris en charge (réf: ici ),
  • le pont JDBC-ODBC ne fonctionne pas correctement avec le pilote ODBC Access lorsque le texte comprend des caractères Unicode avec des points de code au-dessus de U + 00FF (réf: ici ), donc une telle configuration ne serait pas capable de gérer des caractères tels que le grec, le russe, le chinois , Arabe, etc.,
  • le pilote ODBC Access de Microsoft ne fonctionne que sous Windows et
  • il existe des versions 32 bits et 64 bits distinctes du moteur de base de données Access (et du pilote ODBC) qui peuvent être une gêne pour le déploiement.

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

(Les réponses suggérant de meilleures façons de travailler avec les bases de données Access à partir de Java seraient également les bienvenues.)

Gord Thompson
la source
Gord Je voudrais entrer en contact avec vous. Adresse e-mail, est-ce possible? Cheers
bonCodigo
Vous pouvez utiliser les classes jdbc odbc de jre7 également dans jre8 - voir stackoverflow.com/a/34617075/2110961
Frank M.

Réponses:

160

UCanAccess est un pilote JDBC Java pur qui nous 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: Utilisation de 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 JAR à votre projet

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

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

Heureusement, UCanAccess inclut tous les fichiers JAR requis dans son fichier de distribution. Lorsque vous le 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 les cinq (5) JAR à votre projet.

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

Eclipse: cliquez avec le bouton droit sur le projet dans l'Explorateur de packages et choisissez Build Path > Configure Build Path.... Cliquez sur le bouton "Ajouter des fichiers JAR externes ..." pour ajouter chacun des cinq (5) fichiers 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 JAR / Dossier ...", puis recherchez 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 tout!

Maintenant les données "U Can Access" dans les 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'avais aucune implication ou affiliation avec le projet UCanAccess; Je viens de l'utiliser. Je suis depuis devenu un contributeur au projet.

Gord Thompson
la source
2
Avez-vous une affiliation avec cette bibliothèque? Cela pourrait valoir la peine de le divulguer si vous le faites.
Joe le
Pouvez-vous l'utiliser pour vous connecter à un classeur Excel (.xlsx) dans Java 8?
steinbitur
2
@ sємsєм La classe de pilote estnet.ucanaccess.jdbc.UcanaccessDriver
Gord Thompson
1
@GordThompson C'est une excellente réponse. Toute ma classe a été bloquée par ce problème, pensant qu'il s'agissait d'une erreur de privilège du système de fichiers. M'a aidé beaucoup et il a fallu une quantité surprenante de fouilles pour réaliser qu'Oracle a supprimé le pont JDBC-ODBC de Java 8.
wilbomc
1
Pourquoi ne pas intégrer la source de données UcanAcces à JPA avec Hibernate et Spring?
Warren M. Nocos