1. 概述

在这个教程中,我们将学习Apache Derby数据库引擎。这是Apache软件基金会作为开源项目开发的一个基于Java的关系型数据库引擎。

我们将从安装和配置开始,然后了解与之交互的工具。创建一个示例数据库后,我们将学习如何使用Derby的命令行工具执行SQL命令。最后,我们将演示如何通过纯JDBC和Spring Boot应用程序编程连接到数据库。

2. 部署模式

Apache Derby有两种基本部署选项:嵌入式模式和客户端/服务器模式。

在嵌入式模式下,Derby作为单一用户Java应用程序的一部分运行于同一Java虚拟机(JVM)内。由于其自动启动和关闭,它通常对终端用户不可见,也不需要管理员干预。在这种模式下,我们可以设置临时数据库,而无需管理它。

在客户端/服务器模式下,当由提供跨网络多用户连接的应用程序启动时,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包含执行工具和设置环境的脚本
  • demo包含示例程序
  • javadoc包含API文档
  • docs包含Apache Derby文档
  • lib包含Apache Derby的.jar文件
  • test包含Apache Derby的回归测试

3.2. 配置

在开始数据库引擎之前,我们需要配置一些内容。

首先,设置DERBY_HOME环境变量为我们提取的Apache Derbybin目录的位置。例如,如果Derby安装在/opt/derby-db目录下,可以使用如下命令:

export DERBY_HOME=/opt/derby-db

接下来,将DERBY_HOME/bin目录添加到PATH环境变量中,以便我们在任何目录下都可以运行Derby脚本:

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

3.3. Derby库

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提供了针对不同应用的多个工具。我们可以使用derbyrun.jar运行Apache Derby工具和实用程序,而无需设置java CLASSPATH环境变量。**derbyrun.jar文件必须与其它Derby JAR文件位于同一目录。**

4.1. IJ

IJ是一个基于JDBC的Java命令行应用程序。它的主要目的是允许交互式或通过脚本执行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可以通过properties来执行命令,这可以帮助我们节省重复工作,利用IJ工具支持的属性。