Иванов Аркадий
Создан: 20.02.2009
Модиф: 07.03.2020
Частая задача в программировании приложений - это использование встроенной в приложение SQL базы данных. Тяжеловесные мощные PostgreSQL, MySQL требуют некоторых знаний и усилий для настройки. И эти SQL-сервера приходится настраивать отдельно от самого приложения, что не всегда комфортно при развёртывании на дополнительных компьютерах. Вот тут на помощь приходит проект Apache Derby. Проект великолепно документирован, как и все проекты Apache. Я сделал заметки для того, чтобы в будущем разворачивать эту базу за пару минут усилий, поскольку документацию уже прочитал.Производительность, конечно, оставляет желать лучшего, но зато это настоящий SQL. :)
- Исходники следует брать на официальном сайте: http://db.apache.org/derby
- Раскрываем архив в каталог /usr/local/db-derby-10.4.2.0-bin.
- Чтобы не мучаться со сложным названием делаю симлинк:
ln -s /usr/local/db-derby-10.4.2.0-bin /usr/local/derby
- Устанавливаю переменные среды:
export DERBY_HOME=/usr/local/derby
export PATH=$PATH:$DERBY_HOME/bin
- В каталоге $DERBY_HOME/bin запускаем скрипт старта сервера:
./startNetworkServer &
Сетевой сервер использует порт 1527.
- Запускаем интерактивную утилиту работы с базой ij:
ij
- Cетевое подключение к базе (можно и создать её одновременно):
ij> CONNECT 'jdbc:derby://localhost:1527/firstdb;create=true';
- Локальное подключение к базе:
ij> CONNECT 'jdbc:derby:/home/arc/db/messages;user=me;password=secret';
- Дальше можно использовать традиционный SQL (create table, select, ...);
- Посмотреть таблицы в базе:
ij> show tables in app;
- Посмотреть описание таблицы:
describe message;
- Поскольку ij не умеет редактировать строки, удобнее сделать файл с SQL-командами, использовать ij и
скормить ей файл (далее в примере это mycommands.sql). Саму ij (содержится в derbytools.jar) и
embedded драйвер (содержится в derby.jar) надо указать java в командной строке:
java -cp derbytools.jar:derby.jar org.apache.derby.tools.ij mycommands.sql
- Пример файла mycommands.sql:
CONNECT 'jdbc:derby:messages;user=messages;password=messages';
show tables;
describe message;
select TS,INSTS,STATUS FROM MESSAGE WHERE TS < 1582843127036 and TS >= 1582843127036 - BIGINT(ABSENCEPERMITTED)*1000 order by TS desc;
quit;
- Клиентский JDBC-драйвер находится в /usr/local/derby/lib/derbyclient.jar.
В Java-программе класс драйвера называется: String driver = "org.apache.derby.jdbc.ClientDriver";
URL в Java-программе выглядит так: String connectionURL = "jdbc:derby://localhost:1527/" + dbName + ";create=true";
- Чтобы получить DDL существующей базы, выполняю команду системы:
dblook -d 'jdbc:derby:/home/arc/db/messages;user=me;password=secret';
- Способ редактирования командной строки в ij:
- установить jEdit
- в jEdit установить plugin Console
- в настройках plugin-ов установить кодировку UTF-8
- запустить в jEdit plugin Console и дать в нём команду ij
Derby предлагает вариант и встраиваемой(embegged) базы. Это режим, когда управление самой базой делается прямо из задачи.
В этом случае строка драйвера и URL выглядят так:
String driver = "org.apache.derby.jdbc.EmbeddedDriver";
String driver = "jdbc:derby:"+dbName+";create=true";
Для режима embedded Java надо указать использование следующих JAR-файлов: derbyclient.jar и derby.jar