Bearbeiten einer Access-Datenbank von Java ohne ODBC

114

Ich möchte eine Microsoft Access-Datenbank (.accdb- oder .mdb-Datei) aus meinem Java-Projekt heraus bearbeiten. Ich möchte die JDBC-ODBC-Bridge und den Access ODBC-Treiber von Microsoft nicht verwenden, weil:

  • Die JDBC-ODBC-Brücke wurde aus Java SE 8 entfernt und wird nicht unterstützt (siehe hier ).
  • Die JDBC-ODBC-Brücke funktioniert nicht ordnungsgemäß mit dem Access ODBC-Treiber, wenn der Text Unicode-Zeichen mit Codepunkten über U + 00FF enthält (siehe hier ), sodass ein solches Setup keine Zeichen wie Griechisch, Russisch oder Chinesisch verarbeiten kann , Arabisch usw.,
  • Der Access ODBC-Treiber von Microsoft funktioniert nur unter Windows und
  • Es gibt separate 32-Bit- und 64-Bit-Versionen des Access Database Engine (und des ODBC-Treibers), die die Bereitstellung stören können.

Ich habe andere Antworten gesehen, in denen ein JDBC-Treiber für Access-Datenbanken mit dem Namen UCanAccess erwähnt wurde . Wie kann ich mein Java-Projekt für diesen Ansatz einrichten?

(Antworten, die bessere Möglichkeiten für die Arbeit mit Access-Datenbanken von Java aus vorschlagen, wären ebenfalls sehr willkommen.)

Gord Thompson
quelle
Gord, ich würde mich gerne mit dir in Verbindung setzen. E-Mail-Adresse, ist das möglich? Prost
bonCodigo
Sie können jdbc odbc-Klassen von jre7 auch in jre8 verwenden - siehe stackoverflow.com/a/34617075/2110961
Frank M.

Antworten:

160

UCanAccess ist ein reiner Java-JDBC-Treiber, mit dem wir ohne Verwendung von ODBC aus Access-Datenbanken lesen und in diese schreiben können. Es verwendet zwei weitere Pakete, Jackcess und HSQLDB , um diese Aufgaben auszuführen. Im Folgenden finden Sie eine kurze Übersicht über die Einrichtung.

 

Option 1: Verwenden von Maven

Wenn Ihr Projekt Maven verwendet , können Sie UCanAccess einfach über die folgenden Koordinaten einschließen:

groupId: net.sf.ucanaccess
artefaktId: ucanaccess

Das Folgende ist ein Auszug aus pom.xml, möglicherweise müssen Sie das aktualisieren <version>, um die neueste Version zu erhalten:

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

 

Option 2: Manuelles Hinzufügen der JARs zu Ihrem Projekt

Wie oben erwähnt, benötigt UCanAccess Jackcess und HSQLDB. Jackcess wiederum hat seine eigenen Abhängigkeiten . Um UCanAccess verwenden zu können, müssen Sie die folgenden Komponenten einschließen:

UCanAccess (ucanaccess-xxxjar)
HSQLDB (hsqldb.jar, Version 2.2.5 oder neuer)
Jackcess (jackcess-2.xxjar)
commons-lang (commons-lang-2.6.jar oder neuere 2.x-Version )
commons-logging ( commons-logging-1.1.1.jar oder neuere 1.x-Version )

Glücklicherweise enthält UCanAccess alle erforderlichen JAR-Dateien in seiner Verteilungsdatei. Wenn Sie es entpacken, sehen Sie so etwas wie

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

Sie müssen lediglich alle fünf (5) JARs zu Ihrem Projekt hinzufügen .

HINWEIS: Fügen Sie Ihrem Erstellungspfad nichts hinzu loader/ucanload.jar, wenn Sie die anderen fünf (5) JAR-Dateien hinzufügen. Die UcanloadDriverKlasse wird nur unter besonderen Umständen verwendet und erfordert ein anderes Setup. Einzelheiten finden Sie in der entsprechenden Antwort hier .

Eclipse: Klicken Sie im Paket-Explorer mit der rechten Maustaste auf das Projekt und wählen Sie Build Path > Configure Build Path.... Klicken Sie auf die Schaltfläche "Externe JARs hinzufügen ...", um jede der fünf (5) JARs hinzuzufügen. Wenn Sie fertig sind, sollte Ihr Java Build Path ungefähr so ​​aussehen

BuildPath.png

NetBeans: Erweitern Sie die Baumansicht für Ihr Projekt, klicken Sie mit der rechten Maustaste auf den Ordner "Libraries" und wählen Sie "Add JAR / Folder ...". Navigieren Sie dann zur JAR-Datei.

nbAddJar.png

Nach dem Hinzufügen aller fünf (5) JAR-Dateien sollte der Ordner "Libraries" ungefähr so ​​aussehen:

nbLibraries.png

IntelliJ IDEA: Wählen Sie File > Project Structure...aus dem Hauptmenü. Klicken Sie im Bereich "Bibliotheken" auf die +Schaltfläche "Hinzufügen" ( ) und fügen Sie die fünf (5) JAR-Dateien hinzu. Sobald dies erledigt ist, sollte das Projekt ungefähr so ​​aussehen:

IntelliJ.png

 

Das ist es!

Jetzt kann "U Can Access" Daten in .accdb- und .mdb-Dateien mit Code wie diesem verwenden

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

 

Offenlegung

Zum Zeitpunkt des Schreibens dieser Fragen und Antworten war ich weder an dem UCanAccess-Projekt beteiligt noch mit ihm verbunden. Ich habe es gerade benutzt. Ich habe seitdem einen Beitrag zum Projekt geleistet.

Gord Thompson
quelle
2
Haben Sie eine Zugehörigkeit zu dieser Bibliothek? Könnte es wert sein, es offen zu legen, wenn Sie dies tun.
Joe
Können Sie damit eine Verbindung zu einer Excel-Arbeitsmappe (.xlsx) in Java 8 herstellen?
Steinbitur
2
@ sємsєм Die Fahrerklasse istnet.ucanaccess.jdbc.UcanaccessDriver
Gord Thompson
1
@ GordonThompson Das ist eine großartige Antwort. Meine gesamte Klasse war mit diesem Problem konfrontiert und glaubte, es handele sich um einen Dateisystem-Berechtigungsfehler. Hat mir
Laden
1
Wie wäre es mit der Integration der UcanAcces-Datenquelle in JPA in Hibernate und Spring?
Warren M. Nocos