Apache Derby:一款基于 Java 的嵌入式关系型数据库
Apache Derby 是一款基于 Java 实现的开源关系型数据库,支持嵌入式和客户端/服务器部署模式。本文介绍了Apache Derby 的安装配置、常用工具的基本操作以及相关的学习资源。
大家好,我是只谈技术不剪发的 Tony 老师。今天给大家介绍一款嵌入式关系型数据库: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 9 以上运行环境,点击版本链接之后选择一个下载地址镜像,打开的页面中包含了所有的 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。
资源文档
如果想要进一步深入了解和学习 Apache Derby,可以参考以下资源:
- Apache Derby 官方网站;
- Apache Derby 官方文档;
- 入门教程;
- tutorialspoint 在线教程;
- 博客文章;
- Apache Derby 支持的 SQL 功能;
- 管理开发工具:DBeaver、SQuirreL SQL、DbVisualizer。
总结
Apache Derby 是一款基于 Java 实现的关系型数据库,支持嵌入式和客户端/服务器部署模式。总而言之,Derby 是一个小巧而强大的产品,通常作为一个嵌入式数据库运行在其他 Java 应用程序中。本文介绍了 Derby 的安装配置、常用工具的基本操作以及相关的学习资源。
如果觉得文章对你有用,欢迎关注❤️、评论📝、点赞👍!
![Logo](https://devpress.csdnimg.cn/79de2bf0b7994defa4242ef90d5513fa.jpg)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)