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