Перейти к основному содержимому

Начало работы с Apache Derby

· 10 мин. чтения

1. Обзор

В этом руководстве мы узнаем о механизме базы данных Apache Derby, который представляет собой механизм реляционной базы данных на основе Java, разработанный Apache Software Foundation в качестве проекта с открытым исходным кодом.

Мы начнем с его установки и настройки, а затем рассмотрим инструменты, которые он предоставляет для взаимодействия с ним. После создания образца базы данных мы узнаем, как выполнять команды SQL с помощью инструментов командной строки Derby. Наконец, мы увидим, как подключиться к базе данных программно, используя простой JDBC и приложение Spring Boot.

2. Режимы развертывания

Apache Derby имеет два основных варианта развертывания: простой встроенный вариант и вариант клиент/сервер.

Во встроенном режиме Derby работает внутри той же виртуальной машины Java (JVM), что и простое однопользовательское приложение Java. Благодаря автоматическому запуску и завершению работы он обычно невидим для конечных пользователей и не требует вмешательства администратора. В этом режиме мы можем настроить временную базу данных, не управляя ею.

В режиме клиент/сервер Derby запускается на виртуальной машине Java (JVM), на которой размещается сервер при запуске приложения, обеспечивающего многопользовательское подключение по сети.

3. Установка и настройка

Давайте посмотрим, как мы можем установить Apache Derby.

3.1. Монтаж

Во-первых, мы можем скачать последнюю версию Apache Derby отсюда . После этого извлекаем скачанный файл. Извлеченная установка содержит несколько подкаталогов:

$ ls 
bin demo docs index.html javadoc KEYS lib LICENSE NOTICE RELEASE-NOTES.html test
  • bin содержит скрипты для запуска утилит и настройки окружения
  • демо содержит примеры программ
  • javadoc содержит документацию API
  • документы содержат документацию Apache Derby
  • lib содержит файлы Apache Derby .jar
  • test содержит регрессионные тесты для Apache Derby

3.2. Конфигурация

Нам нужно настроить пару вещей, прежде чем мы запустим механизм базы данных.

Во-первых, мы установим переменную среды DERBY_HOME в то место, где мы извлекли корзину Apache Derby. Например, мы можем использовать приведенную ниже команду, если Apache Derby установлен в каталоге /opt/derby-db :

export DERBY_HOME=/opt/derby-db

Затем мы добавляем каталог DERBY_HOME/bin в переменную среды PATH, чтобы мы могли запускать сценарии Derby из любого каталога:

export PATH="$DERBY_HOME/bin:$PATH"

3.3. Библиотеки Дерби

В каталоге lib есть различные библиотеки, предоставляемые Apache Derby :

$ ls
derbyclient.jar derbynet.jar derbyshared.jar
derby.jar derbyoptionaltools.jar derbytools.jar
derbyrun.jar derby.war derbyLocale_XX.jar ...

Каждая из библиотек описана ниже:

  • derby.jar : необходим для встроенных сред. Для клиент-серверных сред нам нужна только эта библиотека на сервере.
  • derbyshared.jar: требуется для всех конфигураций, независимо от того, используем ли мы встроенный механизм, сетевой сервер, удаленный клиент или инструменты базы данных.
  • derbytools.jar: требуется для запуска всех инструментов Apache Derby (IJ, DBLook и импорт/экспорт). Также требуется, если мы используем сетевой сервер или если наше приложение напрямую ссылается на драйверы JDBC.
  • derbyrun.jar: используется для запуска инструментов Apache Derby .
  • derbynet.jar: требуется для запуска сетевого сервера Apache Derby .
  • derbyclient.jar: требуется для использования драйвера сетевого клиента Apache Derby .
  • derbyLocale_XX.jar: требуется для локализации сообщений Apache Derby.

4. Инструменты

Apache Derby предоставляет множество инструментов для различных приложений. Мы можем запускать инструменты и утилиты Apache Derby с derbyrun.jar , используя сокращенные имена, и нам не нужно устанавливать переменную среды java CLASSPATH. Файл derbyrun.jar должен находиться в той же папке, что и другие файлы JAR Derby.

4.1. ИЖ

IJ — это приложение командной строки Java на основе JDBC. Его основная цель — разрешить выполнение инструкций Derby SQL в интерактивном режиме или с помощью сценариев.

Во-первых, давайте запустим инструмент IJ:

$ $DERBY_HOME/bin/ij
ij version 10.13
ij>

Мы также можем использовать следующую команду для его выполнения:

$ java -jar $DERBY_HOME/lib/derbyrun.jar ij
ij version 10.13
ij>

Обратите внимание, что все команды заканчиваются точкой с запятой. Если мы выполним команду без точки с запятой, командная строка переместится на следующую строку.

В разделе об использовании операторов SQL мы увидим, как выполнять несколько команд с помощью IJ.

Кроме того, IJ может использовать свойства для выполнения команд. Это может помочь нам сэкономить часть повторяющейся работы , используя свойства , поддерживаемые инструментом IJ .

Мы можем установить свойства IJ следующими способами:

  • Указав файл свойств с помощью параметра -p файла свойств в командной строке
  • С помощью параметра -D в командной строке

Мы можем создать файл свойств, добавить все необходимые свойства, а затем выполнить следующую команду:

$ java -jar derbyrun.jar ij -p file-name.properties

Если файл file-name.properties не существует в текущем каталоге, мы получим исключение java.io.FileNotFoundException. ``

Например, предположим, что мы хотим создать соединение с определенной базой данных с определенным именем. Мы можем сделать это с помощью свойства ij.database :

$ java -jar -Dij.protocol=jdbc:derby: -Dij.database=foreach derbyrun.jar ij
ij version 10.13
CONNECTION0* - jdbc:derby:foreach
* = current connection

4.2. DBLлук

Инструмент dblook предоставляет DDL (язык определения данных) базы данных. Например, мы можем записать в консоль DDL базы данных foreach :

$ $DERBY_HOME/bin/dblook -d jdbc:derby:foreach
-- Timestamp: 2021-08-23 01:29:48.529
-- Source database is: foreach
-- Connection URL is: jdbc:derby:foreach
-- appendLogs: false

-- ----------------------------------------------
-- DDL Statements for schemas
-- ----------------------------------------------

CREATE SCHEMA "basic_users";

-- ----------------------------------------------
-- DDL Statements for tables
-- ----------------------------------------------

CREATE TABLE "APP"."authors" ("id" INTEGER NOT NULL, "first_name" VARCHAR(255) , "last_name" VARCHAR(255));

-- ----------------------------------------------
-- DDL Statements for keys
-- ----------------------------------------------

-- PRIMARY/UNIQUE
ALTER TABLE "APP"."authors" ADD CONSTRAINT "SQL0000000000-582f8014-017b-6e26-ada1-00000644e000" PRIMARY KEY ("id");

У dblook есть и другие параметры, которые описаны ниже.

Мы можем использовать -o для записи DDL в такой файл, как foreach.sql :

$ sudo $DERBY_HOME/bin/dblook -d jdbc:derby:foreach -o foreach.sql

Мы также можем указать схему с помощью -z и таблицу с -t:

$ sudo $DERBY_HOME/bin/dblook -d jdbc:derby:foreach -o foreach.sql -z SCHEMA_NAME -t "TABLE_NAME"

4.3. Системная информация

Инструмент Apache Derby sysinfo отображает информацию о нашей среде Java и версии Derby. Кроме того, инструмент sysinfo отображает системную информацию на консоли:

$ java -jar $DERBY_HOME/lib/derbyrun.jar sysinfo

------------------ Java Information ------------------
Java Version: 11.0.11
Java Vendor: Ubuntu
Java home: /usr/lib/jvm/java-11-openjdk-amd64
Java classpath: /opt/derby-db/lib/derbyrun.jar
OS name: Linux
OS architecture: amd64
OS version: 5.11.0-27-generic
Java user name: arash
Java user home: /home/arash
Java user dir: /opt/derby-db
java.specification.name: Java Platform API Specification
java.specification.version: 11
java.runtime.version: 11.0.11+9-Ubuntu-0ubuntu2.20.04
--------- Derby Information --------
[/opt/derby-db/lib/derby.jar] 10.13.1.1 - (1873585)
[/opt/derby-db/lib/derbytools.jar] 10.13.1.1 - (1873585)
[/opt/derby-db/lib/derbynet.jar] 10.13.1.1 - (1873585)
[/opt/derby-db/lib/derbyclient.jar] 10.13.1.1 - (1873585)
[/opt/derby-db/lib/derbyshared.jar] 10.13.1.1 - (1873585)
[/opt/derby-db/lib/derbyoptionaltools.jar] 10.13.1.1 - (1873585)

5. Операторы SQL в Apache Derby

Здесь мы рассмотрим некоторые важные операторы SQL, предоставляемые Apache Derby. Мы рассмотрим синтаксис каждого оператора на примере.

5.1. Создать базу данных

Мы можем создать новую базу данных с помощью команды подключения и атрибута create=true в нашей строке подключения:

ij> connect 'jdbc:derby:databaseName;create=true';

5.2. Подключиться к базе данных

IJ автоматически загружает соответствующий драйвер на основе синтаксиса URL, когда мы интерактивно взаимодействуем с базой данных Derby:

ij> connect 'jdbc:derby:foreach' user 'user1' password 'pass123';

5.3. Создать схему

Оператор CREATE SCHEMA определяет схему, которая является способом идентификации определенного пространства имен для набора объектов:

CREATE SCHEMA schema_name AUTHORIZATION userName;

Имена схем не могут превышать 128 символов и должны быть уникальными в пределах базы данных. Кроме того, имена схем не могут начинаться с префикса SYS.

Вот пример схемы с именем foreach_authors :

ij> CREATE SCHEMA foreach_authors;

Кроме того , мы можем создать схему для foreach_authors , к которой могут получить доступ только определенные пользователи с идентификатором arash :

ij> CREATE SCHEMA foreach_authors AUTHORIZATION arash;

5.4. Схема сброса

Мы можем удалить схему с помощью оператора DROP SCHEMA , а также целевая схема должна быть пустой, чтобы DROP SCHEMA завершилась успешно. Мы не можем удалить схему APP (схема пользователя по умолчанию) или схему SYS : ``

DROP SCHEMA schema_name RESTRICT;

Используя ключевое слово RESTRICT , мы можем применить правило, согласно которому не может быть никаких объектов , определенных в указанной схеме для схемы, подлежащей удалению из базы данных.

Давайте посмотрим на пример, чтобы удалить схему:

ij> DROP SCHEMA foreach_authors RESTRICT;

5.5. Создать таблицу

Мы можем использовать оператор CREATE TABLE для создания таблицы , которая содержит столбцы и ограничения:

CREATE TABLE table_name (
column_name1 column_data_type1 constraint (optional),
column_name2 column_data_type2 constraint (optional),
);

Давайте посмотрим пример:

ij> CREATE TABLE posts(post_id INT NOT NULL, publish_date DATE NOT NULL,
view_number INT DEFAULT 0, PRIMARY KEY (post_id));

Если мы не указываем значение по умолчанию , NULL вставляется в столбец как значение по умолчанию .

Другие операторы SQL, такие как INSERT, UPDATE, DELETE и SELECT для действий CRUD, аналогичны стандартному SQL.

6. Программирование JDBC с помощью Apache Derby

Здесь мы узнаем, как создать приложение Java, использующее Apache Derby в качестве ядра базы данных.

6.1. Зависимости Maven

В Maven есть два драйвера Derby : derby и derbynet. Первый используется для встроенных приложений , а второй — для клиент-серверных приложений.

Давайте добавим зависимость Maven для derby :

<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
<version>10.13.1.1</version>
</dependency>

Также мы добавляем зависимость Maven для derbyclient :

<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>10.13.1.1</version>
</dependency>

6.2. URL-адрес JDBC-подключения

Мы можем подключаться к базе данных с различными параметрами строки подключения для клиент-серверных и встроенных приложений.

В приведенном ниже синтаксисе мы можем использовать его для встроенного режима:

jdbc:derby:[subsubprotocol:][databaseName][;attribute=value]

А также мы можем использовать приведенный ниже синтаксис для режима клиент/сервер:

jdbc:derby://server[:port]/databaseName[;attribute=value]

URL-адрес базы данных не содержит имя хоста и номер порта во встроенном режиме. Например:

String urlConnection = "jdbc:derby:foreach;create=true";

6.3. Используйте Apache Derby во встроенном режиме

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

String urlConnection = "jdbc:derby:foreach;create=true";
Connection con = DriverManager.getConnection(urlConnection);
Statement statement = con.createStatement();
String sql = "CREATE TABLE authors (id INT PRIMARY KEY,first_name VARCHAR(255),last_name VARCHAR(255))";
statement.execute(sql);
sql = "INSERT INTO authors VALUES (1, 'arash','ariani')";
statement.execute(sql);

6.4. Используйте Apache Derby в режиме клиент/сервер

Во-первых, мы запускаем команду ниже, чтобы запустить Apache Derby в режиме клиент/сервер:

$ java -jar $DERBY_HOME/lib/derbyrun.jar server start 
Sat Aug 28 20:47:58 IRDT 2021 : Security manager installed using the Basic server security policy.
Sat Aug 28 20:47:58 IRDT 2021 : Apache Derby Network Server - 10.13.1.1 -
(1873585) started and ready to accept connections on port 1527

Мы используем JDBC API для подключения к серверу Apache Derby на локальном хосте и выбираем все записи из таблицы авторов в базе данных foreach :

String urlConnection = "jdbc:derby://localhost:1527/foreach";
try (Connection con = DriverManager.getConnection(urlConnection)) {
Statement statement = con.createStatement();
String sql = "SELECT * FROM authors";
ResultSet result = statement.executeQuery(sql);
while (result.next()) {
// We can print or use ResultSet here
}
} catch (SQLException ex) {
ex.printStackTrace();
}

7. Apache Derby с Spring Boot

В этом разделе подробно не объясняется, как создать приложение на основе Spring Boot , а только настройки, касающиеся взаимодействия с базой данных Apache Derby.

7.1. Зависимости для Apache Derby

Нам просто нужно добавить зависимости Spring Data и Apache Derby из Spring Boot в проект, чтобы включить в него Apache Derby:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derbyclient</artifactId>
<version>10.13.1.1</version>
</dependency>

7.2. Конфигурация весенней загрузки

Мы можем использовать Derby в качестве нашей постоянной базы данных, добавив следующие свойства приложения:

spring.datasource.url=jdbc:derby://localhost:1527/foreach 
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.DerbyTenSevenDialect
spring.jpa.hibernate.ddl-auto=update
spring.datasource.driver-class-name=org.apache.derby.jdbc.ClientDriver

8. Заключение

В этом руководстве мы рассмотрели установку и настройку Apache Derby. После этого у нас был обзор инструментов и некоторых наиболее важных операторов SQL. Мы рассмотрели программирование JDBC с помощью фрагментов кода на Java и, наконец, узнали, как настроить Spring Boot для использования Apache Derby в качестве постоянной базы данных.

Как обычно, примеры, использованные в этой статье, доступны на GitHub .