ITPub博客

首页 > 数据库 > 数据库开发技术 > Apache Derby:一款基于Java的嵌入式关系型数据库

Apache Derby:一款基于Java的嵌入式关系型数据库

原创 数据库开发技术 作者:BUAA_dxy 时间:2024-01-10 21:00:00 0 删除 编辑

今天给大家介绍一款嵌入式关系型数据库:Apache Derby。

Apache Derby 简介

Apache Derby 是一个开源的嵌入式关系型数据库,完全使用 Java 语言实现,并遵循 Apache License, Version 2.0 协议。Apache Derby 是 Apache DB 的一个子项目,它的主要优势包括:

  • Derby 程序体积很小,基本的数据库引擎和嵌入式 JDBC 驱动大概只有 3.5 MB;

  • Derby 基于 Java、JDBC 以及 SQL 标准实现;

  • Derby 提供了一个嵌入式的 JDBC 驱动,可以在任何 Java 应用中嵌入 Derby 数据库;

  • Derby 支持客户端/服务器部署模式,并提供了 Derby Network Client JDBC 驱动和 Derby Network Server;

  • Derby 易于安装、部署和使用。

Derby 最早是由 IBM 于 2004 年贡献给 Apache Software Foundation,开源之前的名称叫做 Cloudscape。目前,Apache Derby 基本上保持每年一个版本更新,最新版本为 10.15.2.0;源代码可以从 GitHub 或者 Apache 官方 SVN 代码库中下载。

📝Oracle 曾经在 JDK 中打包了一个 Derby 版本,叫做 Java DB;不过现在 JDK 中已经不再默认包含这个 db 目录了。

安装配置

Apache Derby 官方网站提供了下载页面。

最新的版本需要 Java 21 以上运行环境,点击版本链接之后选择一个下载地址镜像,打开的页面中包含了所有的 Apache Software Foundation 软件下载目录。然后打开 db/derby/ 就是各种版本的下载目录了,这里我们选择 db-derby-10.15.2.0 子目录:


然后点击下载 db-derby-10.15.2.0-bin.zip 文件,下载完成后进行解压缩。


解压缩之后的目录如下:

  • bin 目录包含了环境设置、服务管理以及常用工具的脚本

  • demo 目录包含了几个示例程序;

  • docs 目录包含了 Derby 官方文档;

  • javadoc 目录包含了 API 文档;

  • lib 目录包含了 Derby 所有的 .jar 文件;

  • test 目录包含了 Derby 回归测试。

Apache Derby 基于 Java 环境运行,需要先安装 JDK 或者 JRE,可以点击下载安装并配置环境变量 JAVA_HOME,将 JDK 的 bin 目录添加到 PATH 环境变量,然后使用java -version查看当前 Java 版本。
PS C:\Users\dongx> java -version
java version "13.0.1" 2019-10-15
Java(TM) SE Runtime Environment (build 13.0.1+9)
Java HotSpot(TM) 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)

接下来还需要设置 Derby 的环境变量,将 DERBY_HOME 设置为解压之后的目录,并且将 DERBY_HOME/bin 添加到 PATH 环境变量。

部署模式

Apache Derby 支持两者基本的部署方式:嵌入式(embedded)或者客户端/服务器模式(client/server)。

对于嵌入式部署,Derby 运行在应用程序的 JVM 中,应用通过 Embedded Derby JDBC 驱动访问数据库。此时,Derby 属于应用的一部分,随着应用启动和关闭,用户无法感知它的存在,通常也不需要进行配置和管理。

对于者客户端/服务器模式,Derby 运行在服务器的 JVM 中,多个应用程序通过网络连接到 Derby 数据库。此时,Derby Network Server 负责管理来自客户端的连接请求,客户端利用 Derby Network Client JDBC 驱动连接到服务器。


接下来我们以嵌入式部署为例,介绍如何配置 Derby。点击运行 bin 目录中的 setEmbeddedCP(Linux)或者 setEmbeddedCP.bat(Windows)脚本:

C:\Users\dongx>D:\Software\db-derby-10.15.2.0-bin\bin\setEmbeddedCP.bat

C:\Users\dongx>SET DERBY_HOME=D:\Software\db-derby-10.15.2.0-bin

C:\Users\dongx>set CLASSPATH=D:\Software\db-derby-10.15.2.0-bin\lib\derbyshared.jar;D:\Software\db-derby-10.15.2.0-bin\lib\derby.jar;D:\Software\db-derby-10.15.2.0-bin\lib\derbytools.jar;D:\Software\db-derby-10.15.2.0-bin/lib/derbyoptionaltools.jar;

C:\Users\dongx>set MODULEPATH=D:\Software\db-derby-10.15.2.0-bin\lib\derbyshared.jar;D:\Software\db-derby-10.15.2.0-bin\lib\derby.jar;D:\Software\db-derby-10.15.2.0-bin\lib\derbytools.jar;D:\Software\db-derby-10.15.2.0-bin/lib/derbyoptionaltools.jar

该脚本会设置相应的 CLASSPATH 和 MODULEPATH 环境变量。

然后运行 bin 目录中的 sysinfo(Linux)或者 sysinfo.bat(Windows)脚本查看 Derby 的环境配置:

C:\Users\dongx>D:\Software\db-derby-10.15.2.0-bin\bin\sysinfo.bat
------------------ Java Information ------------------
Java Version: 13.0.1
Java Vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk-13.0.1
Java classpath: D:\Software\db-derby-10.15.2.0-bin/lib/derbyshared.jar;D:\Software\db-derby-10.15.2.0-bin/lib/derby.jar;D:\Software\db-derby-10.15.2.0-bin/lib/derbynet.jar;D:\Software\db-derby-10.15.2.0-bin/lib/derbyclient.jar;D:\Software\db-derby-10.15.2.0-bin/lib/derbytools.jar;D:\Software\db-derby-10.15.2.0-bin/lib/derbyoptionaltools.jar
OS name: Windows 10
OS architecture: amd64
OS version: 10.0
Java user name: dongx
Java user home: C:\Users\dongx
Java user dir: C:\Users\dongx
java.specification.name: Java Platform API Specification
java.specification.version: 13
java.runtime.version: 13.0.1+9
--------- Derby Information --------
[D:\Software\db-derby-10.15.2.0-bin\lib\derby.jar] 10.15.2.0 - (1873585)
[D:\Software\db-derby-10.15.2.0-bin\lib\derbytools.jar] 10.15.2.0 - (1873585)
[D:\Software\db-derby-10.15.2.0-bin\lib\derbynet.jar] 10.15.2.0 - (1873585)
[D:\Software\db-derby-10.15.2.0-bin\lib\derbyclient.jar] 10.15.2.0 - (1873585)
[D:\Software\db-derby-10.15.2.0-bin\lib\derbyshared.jar] 10.15.2.0 - (1873585)
[D:\Software\db-derby-10.15.2.0-bin\lib\derbyoptionaltools.jar] 10.15.2.0 - (1873585)
------------------------------------------------------
----------------- Locale Information -----------------
Current Locale : [English/United States [en_US]]
Found support for locale: [cs]
version: 10.15.2.0 - (1873585)
Found support for locale: [de_DE]
version: 10.15.2.0 - (1873585)
Found support for locale: [es]
version: 10.15.2.0 - (1873585)
Found support for locale: [fr]
version: 10.15.2.0 - (1873585)
Found support for locale: [hu]
version: 10.15.2.0 - (1873585)
Found support for locale: [it]
version: 10.15.2.0 - (1873585)
Found support for locale: [ja_JP]
version: 10.15.2.0 - (1873585)
Found support for locale: [ko_KR]
version: 10.15.2.0 - (1873585)
Found support for locale: [pl]
version: 10.15.2.0 - (1873585)
Found support for locale: [pt_BR]
version: 10.15.2.0 - (1873585)
Found support for locale: [ru]
version: 10.15.2.0 - (1873585)
Found support for locale: [zh_CN]
version: 10.15.2.0 - (1873585)
Found support for locale: [zh_TW]
version: 10.15.2.0 - (1873585)
------------------------------------------------------
------------------------------------------------------

显示类似以上信息表明 Derby 运行环境配置成功。

基本操作

Derby 提供了几个基于 Java 的实用工具和程序,包括 sysinfo、ij 和 dblook 等。其中,ij 是用于操作 Derby 数据库的一个交互式 SQL 脚本工具。

首先,我们运行 bin 目录中的 ij(Linux)或者ij.bat(Windows)脚本启动 ij:

C:\Users\dongx>D:\Software\db-derby-10.15.2.0-bin\bin\ij.bat
ij version 10.15
ij>

当前 ij 版本为 10.15。输入 help 命令查看使用帮助:

ij> help;

Supported commands include:

PROTOCOL 'JDBC protocol' [ AS ident ];
-- sets a default or named protocol
DRIVER 'class for driver'; -- loads the named class
CONNECT 'url for database' [ PROTOCOL namedProtocol ] [ AS connectionName ];
-- connects to database URL
-- and may assign identifier
SET CONNECTION connectionName; -- switches to the specified connection
SHOW CONNECTIONS; -- lists all connections
AUTOCOMMIT [ ON | OFF ]; -- sets autocommit mode for the connection
DISCONNECT [ CURRENT | connectionName | ALL ];
-- drop current, named, or all connections;
-- the default is CURRENT

SHOW SCHEMAS; -- lists all schemas in the current database
SHOW [ TABLES | VIEWS | PROCEDURES | FUNCTIONS | SYNONYMS ] { IN schema };
-- lists tables, views, procedures, functions or synonyms
...

创建数据库

我们通过 ij 工具创建一个数据库:

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

其中,连接 URL 中的 create=true 表示创建一个新的数据库,名称为 hrdb;如果没有指定该选项,并且数据库不存在的话会返回以下错误:

ij> connect 'jdbc:derby:hrdb';
ERROR XJ004: Database 'hrdb' not found.

使用 exit 命令退出 ij:

ij> exit;

新建的数据库文件位于操作系统当前工作目录,可以使用 ls 或者 dir 命令进行查看:

C:\Users\dongx>dir hrdb

Directory of C:\Users\dongx\hrdb

08/31/2020 04:19 PM <DIR> .
08/31/2020 04:19 PM <DIR> ..
08/31/2020 04:18 PM <DIR> log
08/31/2020 04:19 PM 608 README_DO_NOT_TOUCH_FILES.txt
08/31/2020 04:19 PM <DIR> seg0
08/31/2020 04:19 PM 921 service.properties
2 File(s) 1,529 bytes
4 Dir(s) 143,770,697,728 bytes free

另外,当前目录中还存在一个 derby.log 日志文件。

执行 SQL 语句

再次启动 ij 工具并运行 connect 命令连接数据库:

C:\Users\dongx>D:\Software\db-derby-10.15.2.0-bin\bin\ij.bat
ij version 10.15
ij> connect 'jdbc:derby:hrdb';
ij>

连接成功之后就可以执行各种 SQL 语句,ij 中的语句以分号(;)结束:

ij> create table test(id int primary key, name varchar(50));
0 rows inserted/updated/deleted

ij> insert into test values(1, 'apple'),(2, 'banana');
2 rows inserted/updated/deleted

ij> select * from test;
ID |NAME
--------------------------------------------------------------
1 |apple
2 |banana

2 rows selected

运行 SQL 脚本

ij 工具支持调用 SQL 脚本,执行 run 命令运行指定的文件:

ij> run 'myfile.sql';

run 命令会打印并执行脚本文件中的内容。

断开数据库连接

使用 disconnect 命令断开当前数据库连接:

ij> disconnect;
ij>

如果想要退出 ij 工具,使用 exit 命令;对于嵌入式模式,该命令同时会关闭数据库。

生成 DDL 语句

dblook 工具可以查看指定数据库的 DDL 语句。

C:\Users\dongx>D:\Software\db-derby-10.15.2.0-bin\bin\dblook.bat -d hrdb
-- Timestamp: 2020-08-31 16:57:02.648
-- Source database is:
-- Connection URL is: hrdb
-- appendLogs: false

-- Note: At least one unexpected error/warning message was
-- encountered during DDL generation. See dblook.log
-- to review the message(s).


C:\Users\dongx>D:\Software\db-derby-10.15.2.0-bin\bin\dblook.bat -d jdbc:derby:hrdb
-- Timestamp: 2020-08-31 16:58:25.764
-- Source database is: hrdb
-- Connection URL is: jdbc:derby:hrdb
-- appendLogs: false

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

CREATE TABLE "APP"."TEST" ("ID" INTEGER NOT NULL, "NAME" VARCHAR(50));

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

-- PRIMARY/UNIQUE
ALTER TABLE "APP"."TEST" ADD CONSTRAINT "SQL0000000000-80220011-0174-43a1-f682-00000f4783f0" PRIMARY KEY ("ID");

使用 -o 选项可以将 DDL 语句保存到指定文件中:

C:\Users\dongx>D:\Software\db-derby-10.15.2.0-bin\bin\dblook.bat -d jdbc:derby:hrdb -o hrdb.sql

📝关于 ij、dblook 和其他工具的详细介绍,可以参考官方文档。

Maven 依赖

如果想要在自己的 Java 应用中使用 Apache Derby 数据库,可以添加以下 Maven 依赖:

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

最新的版本配置可以查看 Maven Central。


原文作者:SQL编程思想;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
《SQL编程思想》作者,专注于数据库领域知识的分享。

注册时间:2021-08-26

  • 博文量
    443
  • 访问量
    546927