Manipulowanie bazą danych Access z poziomu języka Java bez ODBC

114

Chcę manipulować bazą danych Microsoft Access (plik accdb lub mdb) z mojego projektu Java. Nie chcę używać mostka JDBC-ODBC Bridge i sterownika Access ODBC firmy Microsoft, ponieważ:

  • most JDBC-ODBC został usunięty z Java SE 8 i nie jest obsługiwany (ref: tutaj ),
  • Most JDBC-ODBC nie działa poprawnie ze sterownikiem Access ODBC, gdy tekst zawiera znaki Unicode z punktami kodowymi powyżej U + 00FF (ref: tutaj ), więc taka konfiguracja nie byłaby w stanie obsłużyć takich znaków jak grecki, rosyjski, chiński , Arabski itp.,
  • sterownik Access ODBC firmy Microsoft działa tylko w systemie Windows, a
  • istnieją oddzielne 32-bitowe i 64-bitowe wersje aparatu Access Database Engine (i sterownika ODBC), które mogą być uciążliwe podczas wdrażania.

Widziałem inne odpowiedzi dotyczące sterownika JDBC dla baz danych Access o nazwie UCanAccess . Jak mogę skonfigurować projekt Java do korzystania z tego podejścia?

(Mile widziane byłyby również odpowiedzi sugerujące lepsze sposoby pracy z bazami danych Access w języku Java).

Gord Thompson
źródło
Gord, chciałbym się z tobą skontaktować. Adres e-mail, czy to możliwe? Pozdrawiam
bonCodigo
Możesz używać klas jdbc odbc z jre7 także w jre8 - patrz stackoverflow.com/a/34617075/2110961
Frank M.

Odpowiedzi:

160

UCanAccess to czysty sterownik Java JDBC, który umożliwia nam odczytywanie i zapisywanie w bazach danych Access bez korzystania z ODBC. Do wykonywania tych zadań używa dwóch innych pakietów, Jackcess i HSQLDB . Poniżej znajduje się krótki przegląd tego, jak go skonfigurować.

 

Opcja 1: Korzystanie z Mavena

Jeśli Twój projekt korzysta z Maven , możesz po prostu dołączyć UCanAccess za pomocą następujących współrzędnych:

groupId: net.sf.ucanaccess
artifactId: ucanaccess

Poniżej znajduje się fragment z pom.xml, może być konieczna aktualizacja, <version>aby uzyskać najnowszą wersję:

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

 

Opcja 2: Ręczne dodawanie plików JAR do projektu

Jak wspomniano powyżej, UCanAccess wymaga Jackcess i HSQLDB. Jackcess z kolei ma swoje własne zależności . Aby korzystać z UCanAccess, musisz dołączyć następujące komponenty:

UCanAccess (ucanaccess-xxxjar)
HSQLDB (hsqldb.jar, wersja 2.2.5 lub nowsza)
Jackcess (jackcess-2.xxjar)
commons-lang (commons-lang-2.6.jar lub nowsza wersja 2.x )
commons-logging ( commons-logging-1.1.1.jar lub nowsza wersja 1.x )

Na szczęście UCanAccess zawiera wszystkie wymagane pliki JAR w swoim pliku dystrybucyjnym. Po rozpakowaniu zobaczysz coś takiego jak

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

Wszystko, co musisz zrobić, to dodać wszystkie pięć (5) plików JAR do swojego projektu.

UWAGA: Czy nie dodać loader/ucanload.jardo ścieżki budowania jeśli dodajesz inne pliki pięciu (5) JAR. UcanloadDriverKlasa jest używana jedynie w szczególnych okolicznościach i wymaga innej konfiguracji. Zobacz odpowiednią odpowiedź tutaj, aby uzyskać szczegółowe informacje.

Eclipse: kliknij prawym przyciskiem myszy projekt w Eksploratorze pakietów i wybierz Build Path > Configure Build Path.... Kliknij przycisk „Dodaj zewnętrzne pliki JAR ...”, aby dodać każdy z pięciu (5) plików JAR. Kiedy skończysz, Twoja ścieżka budowania Java powinna wyglądać mniej więcej tak

BuildPath.png

NetBeans: Rozwiń widok drzewa swojego projektu, kliknij prawym przyciskiem myszy folder „Biblioteki” i wybierz opcję „Dodaj JAR / folder ...”, a następnie przejdź do pliku JAR.

nbAddJar.png

Po dodaniu wszystkich pięciu (5) plików JAR folder „Biblioteki” powinien wyglądać mniej więcej tak:

nbLibraries.png

IntelliJ IDEA: Wybierz File > Project Structure...z menu głównego. W panelu „Biblioteki” kliknij przycisk „Dodaj” ( +) i dodaj pięć (5) plików JAR. Gdy to zrobisz, projekt powinien wyglądać mniej więcej tak:

IntelliJ.png

 

Otóż ​​to!

Teraz dane „U Can Access” w plikach accdb i .mdb przy użyciu takiego kodu

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

 

Ujawnienie

W czasie pisania tego pytania i odpowiedzi nie byłem zaangażowany ani powiązany z projektem UCanAccess; Po prostu go użyłem. Od tego czasu stałem się współtwórcą projektu.

Gord Thompson
źródło
2
Czy masz jakieś powiązania z tą biblioteką? Może warto to ujawnić, jeśli to zrobisz.
Joe
Czy możesz użyć tego do połączenia się ze skoroszytem programu Excel (.xlsx) w języku Java 8?
steinbitur
2
@ sємsєм Klasa kierowcy tonet.ucanaccess.jdbc.UcanaccessDriver
Gord Thompson
1
@GordThompson To świetna odpowiedź. Cała moja klasa utknęła z tym problemem, wierząc, że jest to błąd uprawnień systemu plików. Pomógł mi załadować i zajęło zaskakująco dużo pracy, aby uświadomić sobie, że Oracle
usunął
1
Co powiesz na integrację źródła danych UcanAcces z JPA za pomocą Hibernate i Spring?
Warren M. Nocos,