Управление базой данных 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 должен выглядеть примерно так
NetBeans: разверните древовидное представление для своего проекта, щелкните правой кнопкой мыши папку "Библиотеки" и выберите "Добавить JAR / папку...", затем перейдите к файлу JAR.
После добавления всех пяти (5) JAR-файлов папка "Библиотеки" должна выглядеть примерно так:
IntelliJ IDEA: Выбрать File > Project Structure...
из главного меню. На панели "Библиотеки" нажмите "Добавить" (+
) и добавьте пять (5) файлов JAR. После этого проект должен выглядеть примерно так:
Это оно!
Теперь вы можете получить доступ к данным в файлах.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; Я просто использовал это. С тех пор я стал спонсором проекта.