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 Derbylib
содержит файлы Apache Derby .jartest
содержит регрессионные тесты для 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 .