Управление базой данных Access с Java без ODBC

Я хочу управлять базой данных Microsoft Access (.accdb или .mdb-файл) из моего проекта Java. Я не хочу использовать мост JDBC-ODBC и драйвер ODBC Access от Microsoft, потому что:

  • мост JDBC-ODBC был удален из Java SE 8 и не поддерживается (ref:здесь),
  • мост JDBC-ODBC не работает должным образом с драйвером ODBC Access, когда текст включает символы Юникода с кодовыми точками выше U + 00FF (ref: здесь), поэтому такая настройка не сможет обрабатывать такие символы, как греческий, русский, китайский, арабский и т. д.,
  • драйвер ODBC Access от Microsoft работает только в Windows, и
  • существуют отдельные 32-разрядные и 64-разрядные версии ядра СУБД Access (и драйвера ODBC), которые могут быть помехой для развертывания.

Я видел другие ответы, упоминающие драйвер JDBC для баз данных Access с именем UCanAccess. Как может Я настроил свой проект Java для использования этого подхода?

(ответы, предлагающие лучшие способы работы с базами данных Access из Java, также будут приветствоваться.)

1 ответов


UCanAccess - это чистый драйвер Java JDBC, который позволяет нам читать и писать для доступа к базам данных без использования ODBC. Он использует два других пакета, Jackcess и HSQLDB, для выполнения этих задач. Ниже приводится краткий обзор того, как его настроить.

Вариант 1: Использование Maven

если ваш проект использует Maven вы можете просто включить UCanAccess через следующей координаты:

groupId: net.научная фантастика.ucanaccess
artifactId: ucanaccess

Вариант 2: вручную добавление банок в ваш проект

как упоминалось выше, UCanAccess требует Jackcess и HSQLDB. Jackcess, в свою очередь, имеет свои зависимости. Поэтому для использования UCanAccess вам нужно будет включить следующие компоненты:

UCanAccess (ucanaccess-x.x.x.jar)
HSQLDB (hsqldb.jar, версия 2.2.5 или новее)
Jackcess (jackcess-2.x.x.jar)
commons-lang (commons-lang-2.6.jar или новее 2.X версии)
commons-logging (commons-logging-1.1.1.jar или новее 1.X версии)

к счастью, UCanAccess включает все необходимые файлы JAR в свой файл распространения. Когда вы распакуете его, вы увидите что-то вроде

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

все, что вам нужно сделать, это добавить всех пять (5) банки для вашего проекта.

Примечание: Do не добавить loader/ucanload.jar к вашему пути сборки, если вы добавляете другие пять (5) файлов JAR. The UcanloadDriver класс используется только в особых обстоятельствах и требует другой настройки. См. ответ здесь для сведения.

затмение: щелкните правой кнопкой мыши проект в Проводник пакетов и выберите Build Path > Configure Build Path.... Нажмите кнопку " Добавить внешние банки..."кнопка для добавления каждой из пяти (5) банок. Когда вы закончите, ваш путь сборки Java должен выглядеть примерно так

BuildPath.png

NetBeans: разверните представление дерева для вашего проекта, щелкните правой кнопкой мыши папку " библиотеки "и выберите" Добавить JAR/Folder...", затем перейдите к файлу JAR.

nbAddJar.png

после добавления всех пяти (5) файлов JAR папка "библиотеки" должна выглядеть примерно так:

nbLibraries.png

IntelliJ идея: выбрать File > Project Structure... из главного меню. На панели" библиотеки "нажмите кнопку "Добавить" (+) и добавьте пять (5) файлов JAR. После этого проект должен выглядеть примерно так:

IntelliJ.png

вот именно!

теперь "U может получить доступ" к данным .accdb и .mdb файлы с использованием кода такой

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

разоблачение

на момент написания этого Q&A у меня не было участия или принадлежности к проекту UCanAccess; я просто использовал его. С тех пор я стал участником проекта.