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

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

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

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

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

1 ответ

Решение

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

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

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

идентификатор группы: net.sf.ucanaccess
artifactId: ucanaccess

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

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

UCanAccess (ucanaccess-xxxjar)
HSQLDB (hsqldb.jar, версия 2.2.5 или новее)
Джекцесс (jackcess-2.xxjar)
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) JAR-файлов в ваш проект.

ПРИМЕЧАНИЕ: не добавляйте loader/ucanload.jar к вашему пути сборки, если вы добавляете другие пять (5) файлов JAR. UcanloadDriver Класс используется только в особых обстоятельствах и требует другой настройки. Смотрите соответствующий ответ здесь для деталей.

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

BuildPath.png

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

nbAddJar.png

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

nbLibraries.png

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

IntelliJ.png

Это оно!

Теперь вы можете получить доступ к данным в файлах.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; Я просто использовал это. С тех пор я стал спонсором проекта.

Другие вопросы по тегам