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.)
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. KlasaUcanloadDriver
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
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.
Po dodaniu wszystkich pięciu (5) plików JAR folder" Libraries " powinien wyglądać mniej więcej tak:
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:
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.
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