Apache Derby

Иванов Аркадий

Создан: 20.02.2009
Модиф: 07.03.2020

   

     Частая задача в программировании приложений - это использование встроенной в приложение SQL базы данных. Тяжеловесные мощные PostgreSQL, MySQL требуют некоторых знаний и усилий для настройки. И эти SQL-сервера приходится настраивать отдельно от самого приложения, что не всегда комфортно при развёртывании на дополнительных компьютерах. Вот тут на помощь приходит проект Apache Derby. Проект великолепно документирован, как и все проекты Apache. Я сделал заметки для того, чтобы в будущем разворачивать эту базу за пару минут усилий, поскольку документацию уже прочитал.Производительность, конечно, оставляет желать лучшего, но зато это настоящий SQL. :)

 

  1. Исходники следует брать на официальном сайте: http://db.apache.org/derby
  2. Раскрываем архив в каталог /usr/local/db-derby-10.4.2.0-bin.
  3. Чтобы не мучаться со сложным названием делаю симлинк:

    ln -s /usr/local/db-derby-10.4.2.0-bin /usr/local/derby
     
  4. Устанавливаю переменные среды:
    export DERBY_HOME=/usr/local/derby
    export PATH=$PATH:$DERBY_HOME/bin

     
  5.  В каталоге $DERBY_HOME/bin запускаем скрипт старта сервера:
    ./startNetworkServer &

    Сетевой сервер использует порт 1527.
     
  6.  Запускаем интерактивную утилиту работы с базой ij:
    ij
     
  7. Cетевое подключение к базе (можно и создать её одновременно):
    ij> CONNECT 'jdbc:derby://localhost:1527/firstdb;create=true';
     
  8. Локальное подключение к базе:
    ij> CONNECT 'jdbc:derby:/home/arc/db/messages;user=me;password=secret';
     
  9. Дальше можно использовать традиционный SQL (create table, select, ...);
     
  10. Посмотреть таблицы в базе: 
    ij> show tables in app;
     
  11. Посмотреть описание таблицы:
    describe message;
     
  12. Поскольку 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
     
  13. Пример файла 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;

     
  14. Клиентский 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";
     
  15. Чтобы получить DDL существующей базы, выполняю команду системы:
    dblook -d 'jdbc:derby:/home/arc/db/messages;user=me;password=secret';
     
  16. Способ редактирования командной строки в 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