Манипулирование базы данных Access с Java без ODBC

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

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

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

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

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

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

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

groupId: 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: щелкните правой кнопкой мыши проект в обозревателе пакетов и выберите « Build Path > Configure Build Path... . Нажмите кнопку «Добавить внешние JAR …», чтобы добавить каждый из пяти (5) JAR. Когда вы закончите, ваш путь построения Java должен выглядеть примерно так:

BuildPath.png

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

nbAddJar.png

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

nbLibraries.png

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

IntelliJ.png

Это оно!

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

Давайте будем гением компьютера.