Manipulating an Access database from Java without ODBC
Управление базой данных Access из Java без ODBC
Я хочу управлять базой данных Microsoft Access (файлом.accdb или .mdb) из моего Java-проекта. Я не хочу использовать мост JDBC-ODBC и драйвер Access ODBC от Microsoft, потому что:
Мост JDBC-ODBC был удален из Java SE 8 и не поддерживается (ссылка: здесь),
Мост JDBC-ODBC не работает должным образом с драйвером Access ODBC, когда текст содержит символы Юникода с кодовыми точками выше U + 00FF (ссылка: здесь), поэтому такая настройка не сможет обрабатывать такие символы, как греческий, русский, китайский, арабский и т.д.,
драйвер Access ODBC от Microsoft работает только в Windows, и
существуют отдельные 32-разрядные и 64-разрядные версии компонента Access Database Engine (и драйвера ODBC), которые могут создавать неудобства при развертывании.
Я видел другие ответы, в которых упоминается драйвер JDBC для баз данных Access с именем UCanAccess. Как я могу настроить свой Java-проект на использование этого подхода?
(Ответы, предлагающие лучшие способы работы с базами данных Access из Java, также приветствовались бы.)
Переведено автоматически
Ответ 1
UCanAccess - это чистый Java-драйвер JDBC, который позволяет нам читать из баз данных Access и записывать в них без использования ODBC. Для выполнения этих задач используются два других пакета, Jackcess и HSQLDB. Ниже приведен краткий обзор того, как ее настроить.
Вариант 1: использование Maven
Если в вашем проекте используется Maven, вы можете просто включить UCanAccess по следующим координатам:
groupId: net.sf.ucanaccess
artifactId: ucanaccess
Ниже приведен отрывок из pom.xml, возможно, вам потребуется обновить <version>, чтобы получить самую последнюю версию:
Как упоминалось выше, для UCanAccess требуются Jackcess и HSQLDB. Jackcess, в свою очередь, имеет свои собственные зависимости. Итак, чтобы использовать UCanAccess, вам необходимо включить следующие компоненты:
Все, что вам нужно сделать, это добавить все пять (5) JAR в ваш проект.
ПРИМЕЧАНИЕ: Не добавляйте loader/ucanload.jar в свой путь сборки, если вы добавляете остальные пять (5) файлов JAR. Класс UcanloadDriver используется только в особых обстоятельствах и требует другой настройки. Подробнее смотрите соответствующий ответ здесь.
Eclipse: щелкните проект правой кнопкой мыши в проводнике пакетов и выберите Build Path > Configure Build Path.... Нажмите кнопку "Добавить внешние банки данных ...", чтобы добавить каждую из пяти (5) банок данных. Когда вы закончите, ваш путь сборки Java должен выглядеть примерно так
NetBeans: Expand the tree view for your project, right-click the "Libraries" folder and choose "Add JAR/Folder...", then browse to the JAR file.
After adding all five (5) JAR files the "Libraries" folder should look something like this:
IntelliJ IDEA: Choose File > Project Structure... from the main menu. In the "Libraries" pane click the "Add" (+) button and add the five (5) JAR files. Once that is done the project should look something like this:
That's it!
Now "U Can Access" data in .accdb and .mdb files using code like this
// assumes... // import java.sql.*; Connection conn=DriverManager.getConnection( "jdbc:ucanaccess://C:/__tmp/test/zzz.accdb"); Statements= conn.createStatement(); ResultSetrs= s.executeQuery("SELECT [LastName] FROM [Clients]"); while (rs.next()) { System.out.println(rs.getString(1)); }
Disclosure
At the time of writing this Q&A I had no involvement in or affiliation with the UCanAccess project; I just used it. I have since become a contributor to the project.