Я хочу манипулировать базой данных Microsoft Access (файл .accdb или .mdb) из моего проекта Java. Я не хочу использовать мост JDBC-ODBC и драйвер ODBC Access из Microsoft, потому что:
- Мост JDBC-ODBC был удален из Java SE 8 и не поддерживается (ссылка: здесь),
- Мост JDBC-ODBC не работает должным образом с драйвером Access ODBC, когда текст включает символы Unicode с кодовыми точками выше U + 00FF (ref: здесь), поэтому такая установка не сможет обрабатывать такие символы, как греческий, русский, китайский, арабский и т.д.,
- Драйвер доступа ODBC от Microsoft работает только в Windows и
- Существуют отдельные 32-битные и 64-разрядные версии Engine Database Engine (и драйвера ODBC), которые могут быть неприятными для развертывания.
Я видел другие ответы, в которых упоминается драйвер JDBC для баз данных Access с именем UCanAccess. Как я могу настроить свой проект Java для использования этого подхода?
(Ответы, предлагающие лучшие способы работы с базами данных Access с Java, также были бы очень желанными.)
Ответ 1
UCanAccess - это чистый JDBC-драйвер Java, который позволяет нам выполнять чтение и запись в базы данных Access без использования ODBC. Для выполнения этих задач используются два других пакета: Jackcess и HSQLDB. Ниже приведен краткий обзор того, как его настроить.
Вариант 1. Использование Maven
Если ваш проект использует Maven, вы можете просто включить UCanAccess с помощью следующих координат:
идентификатор группы: net.sf.ucanaccess
artifactId: ucanaccess
Ниже приведен отрывок из pom.xml
, вам может потребоваться обновить <version>
, чтобы получить самый последний выпуск:
<dependencies>
<dependency>
<groupId>net.sf.ucanaccess</groupId>
<artifactId>ucanaccess</artifactId>
<version>4.0.4</version>
</dependency>
</dependencies>
Вариант 2. Добавление JAR файлов в ваш проект вручную
Как упоминалось выше, UCanAccess требует Jackcess и HSQLDB. У Джекцесса в свою очередь есть свои зависимости. Поэтому для использования UCanAccess вам необходимо будет включить следующие компоненты:
UCanAccess (ucanaccess-x.x.x.jar)
HSQLDB (hsqldb.jar, версия 2.2.5 или новее)
Джекцесс (jackcess-2.x.x.jar)
commons-lang (commons-lang-2.6.jar или более новая версия 2.x)
регистрация общего пользования (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));
}
Раскрытие
На момент написания этого вопроса я не имел никакого отношения к проекту UCanAccess и не имел к нему отношения; Я просто использовал это. С тех пор я стал спонсором проекта.