Apache Derby 是一个轻量级的关系型数据库,完全用 Java 编写,它是 Apache 软件基金会的一部分。由于其小巧、易于集成的特性,Apache Derby 适合嵌入式应用、桌面应用程序以及小型 Web 应用。以下是对 Apache Derby 的详细使用攻略,帮助你快速上手。

1. 安装与环境配置

1.1 下载与安装

Apache Derby 不需要安装,只需下载并解压即可使用。

1.2 设置环境变量

为了方便在命令行中使用 Derby,你需要配置一些环境变量。

  1. 将 derby.jar 和 derbytools.jar 文件路径添加到 CLASSPATH 环境变量。export DERBY_HOME=/path/to/derby export CLASSPATH=$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar:$CLASSPATH 如果是 Windows 环境,设置为:set DERBY_HOME=C:\path\to\derby set CLASSPATH=%DERBY_HOME%\lib\derby.jar;%DERBY_HOME%\lib\derbytools.jar;%CLASSPATH%
  2. 启动 Derby 的命令行工具:cd $DERBY_HOME/bin ./startNetworkServer # 启动 Derby 网络服务

2. 连接到数据库

2.1 使用 ij 连接

ij 是 Apache Derby 提供的一个命令行工具,用于执行 SQL 查询。

  • 启动 ij 工具:cd $DERBY_HOME/bin ./ij
  • 连接到一个数据库:connect 'jdbc:derby:/path/to/yourdb;create=true'; 如果数据库文件不存在,则 create=true 会自动创建数据库。

2.2 使用 JDBC 连接

如果你希望通过 Java 程序连接到 Derby 数据库,你可以使用 JDBC API。

  • 示例代码:import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.ResultSet; public class DerbyExample { public static void main(String[] args) { try { // 加载 Derby JDBC 驱动 Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); // 连接数据库 String url = "jdbc:derby:/path/to/yourdb;create=true"; Connection conn = DriverManager.getConnection(url); // 创建 Statement Statement stmt = conn.createStatement(); // 执行查询 String createTableSQL = "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(100))"; stmt.executeUpdate(createTableSQL); String insertSQL = "INSERT INTO users (id, name) VALUES (1, 'John')"; stmt.executeUpdate(insertSQL); // 查询数据 ResultSet rs = stmt.executeQuery("SELECT * FROM users"); while (rs.next()) { System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name")); } // 关闭连接 conn.close(); } catch (Exception e) { e.printStackTrace(); } } }

3. 常用操作

3.1 创建数据库与表

创建一个数据库并在其中创建表格:

CREATE DATABASE myDB;
connect 'jdbc:derby:myDB;create=true';

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);

3.2 插入数据

INSERT INTO users (id, name) VALUES (1, 'John Doe');
INSERT INTO users (id, name) VALUES (2, 'Jane Doe');

3.3 查询数据

SELECT * FROM users;

3.4 更新数据

UPDATE users SET name = 'John Smith' WHERE id = 1;

3.5 删除数据

DELETE FROM users WHERE id = 2;

3.6 删除表

DROP TABLE users;

3.7 删除数据库

DROP DATABASE myDB;

4. 性能调优

4.1 数据库压缩

Apache Derby 支持数据库的压缩,可以使用如下命令来优化数据库的存储:

CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE('SCHEMA', 'TABLE_NAME');

4.2 内存数据库

Derby 支持内存数据库,它在临时文件中存储数据,不会写入磁盘,适合快速的数据操作。

connect 'jdbc:derby:memory:myDB;create=true';

4.3 查询优化

  • 使用索引来加速查询:CREATE INDEX idx_user_name ON users (name);

5. 嵌入式模式与客户端模式

5.1 嵌入式模式

在嵌入式模式下,Derby 会作为你的应用的一部分运行,不需要网络连接。

  • 使用嵌入式模式连接数据库:String url = "jdbc:derby:/path/to/db;create=true"; Connection conn = DriverManager.getConnection(url);

5.2 客户端模式

在客户端模式下,Derby 会通过网络与应用程序连接,可以支持远程访问。

  • 启动网络服务器:./startNetworkServer
  • 使用客户端连接:String url = "jdbc:derby://localhost:1527/myDB;create=true"; Connection conn = DriverManager.getConnection(url);

6. 常见问题及解决

6.1 数据库无法连接

  • 确保 Derby 网络服务已启动,使用 startNetworkServer 启动服务。
  • 检查 JDBC URL 是否正确。

6.2 磁盘空间不足

  • 如果 Derby 数据库文件过大,可以考虑使用压缩工具或定期清理不必要的表。

6.3 内存限制

  • 如果遇到内存不足的错误,可以通过增加 Java 虚拟机(JVM)的堆内存大小来解决:java -Xmx1024m -Xms512m -jar your-app.jar

7. 备份与恢复

7.1 数据库备份

在 Derby 中,可以简单地复制数据库文件来进行备份。通常,数据库文件位于 myDB 目录中。

7.2 数据库恢复

将备份的数据库文件恢复到相同的路径,即可恢复数据。

8. 常用工具

8.1 Derby Network Client

这是用于与 Derby 网络服务器通信的工具,可以通过它来管理和执行 SQL 查询。

8.2 DB Visualizer

一个支持 Derby 的数据库管理工具,适用于查询、管理和调试 Derby 数据库。

9. 结语

Apache Derby 是一个轻量级的关系型数据库,特别适用于 Java 应用的嵌入式场景。它简单、易用、开源,非常适合小型应用或需要内存数据库的场景。如果你的应用对性能要求不高且需要一个小巧的数据库,Apache Derby 会是一个不错的选择。