Javenue logo

Javenue

Программирование на Java

Информационные технологии

Работа с MS Access в Java

Даже если ваш проект использует новейшие разработки в области кросс-платформенного ПО, рано или поздно придется столкнуться с технологиями, с которыми не очень-то и хотелось сталкиваться. Так случилось и со мной, когда заказчик захотел получать отчеты в виде базы данных MS Access.

Пришлось порыться в поисках java-библиотеки для работы с форматом mdb. О результатах своих поисков я и хочу вам рассказать.

Первое, что пришло на ум - JDBC-ODBC Bridge. Стандартная реализация находится в JDK - класс sun.jdbc.odbc.JdbcOdbcDriver - это драйвер, с помощью которого можно общаться с файлами mdb.

Но данный подход был отвергнут сразу, так как этот мост работает через msjet40.dll. То есть на Linux это работать не будет.

Второй вариарт - использование pure JDBC драйвера. Хорошей библиотекой для этого является HXTT Access. Но у нее есть один недостаток - она платная. Evaluation версия работает 30 дней и не позволяет выполнять более 50 запросов на одно соединение. Да и не серьезно как-то использовать нелицензионные версии библиотек для коммерческих продуктов.

Для тех, кто все же решит использовать эту библиотеку - выполнение create database if not exists создавало новый файл mdb, который потом корректно не открывался. Возможно, это очередное ограничение на использование пробной версии. Workaround - лучше создать пустую базу, например template.mdb, а потом ее копировать и уже тогда использовать копию для своих нужд.

Наконец, взгляд был брошен на open source сообщество. В частности была обнаружена библиотека с оригинальным названием jackcess.

API библиотеки достаточно прозрачное. Никаких глюков не обнаружено. Со скоростью есть небольшие проблемы: с ростом базы данных скорость записи уменьшается. 500 тысяч записей писало около 4-х часов, тогда как 50 тысяч - около 10-ти минут.

О нюансах использования библиотеки можно почитать на сайте проекта. Я лишь хочу дать минимально представление об ее использовании.

Итак, для создания новой базы данных (или открытия старой) используется следующая конструкция:

  File file = new File("d:/test.mdb")
  Database db = Database.create(file);

Чтобы создать новую таблицу, необходимо сперва описать все колонки, из которых она будет состоять:

  List columns = new ArrayList();

  Column col = new Column();
  col.setName("Mobile");
  col.setSQLType(Types.VARCHAR);
  columns.add(col);

Для установки типов используйте Types из пакета java.sql. Для типа MEMO подойдет LONGVARCHAR.

Непосредственно создание новой таблицы:

  db.createTable("tabl", columns);

Для того, чтобы создать запись в таблице, нужно выполнить следующий код:

  Table newTable = db.getTable("tabl");

  newTable.addRow(new Object[] {"value"});

Ну и последнее, базу данных после работы необходимо закрывать:

  db.flush();
  db.close();

Самое главное - не забыть выполнить flush, особенно если сразу после наполнения базы данными необходимо отдать mdb-файл пользователю на скачивание или использовать внутри приложения для других целей. В первый раз я совершил такую ошибку и сразу закрывал базу данных. Результат - скачивался недописанный файл.

Если вы знаете еще какие-нибудь библиотеки для работы с MS Access, пишите - обсудим. Всего хорошего.


Комментариев: 0

  Выйти

  * для публикации комментариев нужно