Manipulowanie bazą danych Access z Javy bez ODBC

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

  • Most JDBC-ODBC został usunięty z Java SE 8 i nie jest obsługiwany (ref: tutaj),
  • mostek JDBC-ODBC nie działa poprawnie ze sterownikiem Access ODBC, gdy tekst zawiera znaki Unicode z punktami kodu powyżej U + 00FF (ref: tutaj), więc taka konfiguracja nie będzie w stanie obsługiwać znaków takich jak Grecki, Rosyjski, Chiński, Arabski itp.,
  • sterownik Access ODBC firmy Microsoft działa tylko w systemie Windows i
  • istnieją oddzielne 32-bitowe i 64-bitowe wersje silnika bazy danych Access (i sterownika ODBC), które mogą być uciążliwe dla wdrożenia.

Widziałem inne odpowiedzi mówiące o sterowniku JDBC dla baz danych Access o nazwie UCanAccess . Jak mogę skonfigurować projekt Java tak, aby korzystał z tego podejścia?

(Odpowiedzi sugerowanie lepszych sposobów pracy z bazami danych Access z Javy byłoby również mile widziane.)

Author: Community, 2014-02-22

1 answers

UCanAccess jest czystym sterownikiem Java JDBC, który pozwala nam odczytywać i zapisywać dostęp do baz danych bez użycia 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: Używanie Mavena

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

"GroupId": {]} netto.sf.ucanaccess
artifactId: ucanaccess

 

Opcja 2: Ręczne dodawanie słoików do projektu

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

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

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

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) słoików do swojego projektu.

UWAGA: Do Nie dodaj loader/ucanload.jar do ścieżka budowania, jeśli dodajesz pozostałe pięć (5) plików JAR. Klasa UcanloadDriver jest używana tylko w szczególnych okolicznościach i wymaga innej konfiguracji. Zobacz powiązaną odpowiedź tutaj po szczegóły.

Eclipse: kliknij prawym przyciskiem myszy projekt w Package Explorer i wybierz Build Path > Configure Build Path.... Kliknij "Dodaj zewnętrzne słoiki..."przycisk do dodawania każdego z pięciu (5) słoików. Po zakończeniu ścieżki budowania Javy powinny wyglądać tak: to

BuildPath.png

NetBeans: rozwiń widok drzewa dla swojego projektu, kliknij prawym przyciskiem myszy folder "Libraries "i wybierz" Add Jar/Folder...", a następnie przejdź do pliku JAR.

nbaddżar.png

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

nbLibraries.png

IntelliJ IDEA: Wybierz File > Project Structure... z menu głównego. W okienku" biblioteki "kliknij przycisk" Dodaj " (+) i dodaj pięć (5) słoików pliki. Po zakończeniu tego projektu projekt powinien wyglądać mniej więcej tak:

IntelliJ.png

 

To jest to!

Teraz "U można uzyskać dostęp" dane w .accdb i .pliki mdb używające 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 momencie pisania tego pytania i odpowiedzi nie miałem żadnego zaangażowania ani powiązania z projektem UCanAccess; po prostu go używałem. Od tego czasu stałem się współtwórcą projektu.

 137
Author: Gord Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:59