凌峰创科服务平台

Apache Derby网络服务器如何配置与使用?

Apache Derby 不仅是一个嵌入式的数据库,它也提供了一个功能强大的网络服务器模式,允许多个客户端通过网络连接到同一个数据库实例,这使得 Derby 能够在客户端-服务器架构中应用。

Apache Derby网络服务器如何配置与使用?-图1
(图片来源网络,侵删)

什么是 Derby 网络服务器?

Derby 网络服务器(通常称为 derbynet)是一个独立的 Java 进程,它的主要作用是监听网络端口,接收来自客户端应用程序的数据库连接请求,并将这些请求转发给后端的 Derby 数据库引擎进行处理。

它扮演了“中间人”或“门卫”的角色,保护着你的数据库,并允许远程客户端访问它。


工作原理

  1. 启动服务器: 你首先需要启动 Derby 网络服务器,它会在一个指定的端口上(默认为 1527)开始监听连接请求。
  2. 客户端连接: 远程的客户端应用程序(例如一个 Java 程序、一个 SQuirreL SQL 客户端等)使用 JDBC 驱动程序,通过网络地址(如 jdbc:derby://localhost:1527/database_name)来连接服务器。
  3. 请求处理: 网络服务器接收到连接请求后,会验证客户端的凭据(用户名和密码),验证通过后,它会建立一个到目标数据库的会话。
  4. SQL 执行: 客户端发送的 SQL 语句(如 SELECT, INSERT, UPDATE)会通过网络发送到服务器,服务器再将其传递给 Derby 引擎执行。
  5. 返回结果: 执行结果会沿着相反的路径返回给客户端。

如何启动 Derby 网络服务器?

启动网络服务器最常用的方式是使用 ij 工具(Derby 的命令行交互式工具)。

前提条件

确保你已经下载并解压了 Derby,并且设置了 DERBY_HOME 环境变量,同时将 $DERBY_HOME/bin 添加到你的 PATH 环境变量中。

Apache Derby网络服务器如何配置与使用?-图2
(图片来源网络,侵删)

启动命令

在命令行中,进入任意一个你想存放数据库的目录(my_databases),然后执行以下命令:

java -jar $DERBY_HOME/lib/derbyrun.jar server start

命令解释:

  • java -jar $DERBY_HOME/lib/derbyrun.jar: 使用 derbyrun.jar 这个可执行 JAR 文件,它包含了运行 Derby 所需的所有类和资源。
  • server: 指定要运行 server 子命令,即启动网络服务器。
  • start: 指定以“启动”模式运行,服务器会在后台运行,并返回命令提示符。

成功启动后,你会看到类似以下的输出:

Apache Derby Network Server - 10.16.1.0 - (1908273) started and ready to accept connections on port 1527

停止服务器: 你可以通过以下命令优雅地停止服务器:

Apache Derby网络服务器如何配置与使用?-图3
(图片来源网络,侵删)
java -jar $DERBY_HOME/lib/derbyrun.jar server shutdown

或者,如果你在启动时指定了 -p 参数来设置一个关闭端口,你也可以向该端口发送一个特定的数据包来关闭服务器。


如何连接到网络服务器?

客户端需要使用 Derby 的 JDBC 网络客户端驱动程序进行连接。

添加 JDBC 驱动到客户端项目

确保你的客户端项目(Java 应用、SQuirreL 等)的类路径中包含 Derby 的客户端驱动 JAR 文件:derbyclient.jar (位于 $DERBY_HOME/lib 目录下)。

JDBC 连接 URL 格式

连接 Derby 网络服务器的 URL 格式如下:

jdbc:derby://<host>:<port>/<database_name>[;<attributes>]
  • <host>: 服务器的主机名或 IP 地址,如果服务器在本地运行,通常使用 localhost
  • <port>: 服务器监听的端口号,默认是 1527
  • <database_name>: 你要连接的数据库名称,如果数据库不存在,Derby 可以根据配置创建它。
  • [;<attributes>]: 可选属性,用于指定连接行为。

连接属性

常用的连接属性包括:

  • create=true: 如果数据库不存在,则创建它。
  • user=<username>: 指定数据库用户名。
  • password=<password>: 指定数据库密码。
  • retrieveMessagesFromServerOnGetMessage=true: 从服务器获取详细的 SQL 错误消息,非常有助于调试。

示例:在 Java 代码中连接

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
public class DerbyNetworkClientExample {
    public static void main(String[] args) {
        // JDBC URL for connecting to a network server
        String dbURL = "jdbc:derby://localhost:1527/sample;create=true;user=app;password=app";
        // The driver is automatically loaded by DriverManager in modern Java
        // For older Java versions, you might need: Class.forName("org.apache.derby.jdbc.ClientDriver");
        try (Connection conn = DriverManager.getConnection(dbURL);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT 'Hello from Derby Network Server!' AS GREETING")) {
            if (conn != null) {
                System.out.println("Connected to the database successfully!");
            }
            while (rs.next()) {
                System.out.println(rs.getString("GREETING"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

示例:使用 SQuirreL SQL 客户端

  1. 下载并安装 SQuirreL SQL。
  2. 启动 SQuirreL,进入 Drivers 标签页。
  3. 点击 号添加新驱动。
    • Name: Apache Derby (Network)
    • Example URL: jdbc:derby://localhost:1527/database
    • Driver Class: org.apache.derby.jdbc.ClientDriver
    • 点击 Add Class... 按钮,然后选择你下载的 derbyclient.jar 文件。
  4. 切换到 Aliases 标签页,点击 号添加一个新的数据库连接别名。
    • Name: My Derby DB
    • Driver: 选择你刚刚创建的 Apache Derby (Network)
    • URL: jdbc:derby://localhost:1527/sample
    • User Name: app
    • Password: app
    • 点击 Test 按钮,如果连接成功,就可以点击 Connect 了。

安全性考虑

默认情况下,Derby 网络服务器没有启用用户认证,任何能够连接到端口的客户端都可以访问数据库,在生产环境中,这非常危险

启用用户认证

你可以通过在启动服务器时指定一个属性文件来启用用户认证。

步骤:

  1. 创建一个属性文件,db.properties:
    # User authentication properties
    app=derby
    admin=derby_admin_password
  2. 使用 -p 参数启动服务器,并指定该属性文件:
    java -jar $DERBY_HOME/lib/derbyrun.jar server start -p db.properties
  3. 客户端连接时就必须提供正确的用户名和密码了。

使用防火墙

将运行 Derby 服务器的机器的防火墙配置为只允许来自受信任 IP 地址的连接访问 1527 端口。


优点与缺点

优点

  • 多用户并发访问: 与嵌入式模式不同,网络服务器可以同时处理来自多个客户端的请求。
  • 客户端/服务器架构: 适合将数据库和应用程序部署在不同的机器上,提高了系统的灵活性和可扩展性。
  • 跨平台: 只要客户端有 Java 运行环境和 JDBC 驱动,就可以从任何操作系统连接到服务器。
  • 轻量级: 相对于 Oracle、MySQL 等大型数据库,Derby 非常小巧,启动快速,资源占用少。

缺点

  • 性能开销: 网络通信(序列化、反序列化、网络延迟)会比嵌入式模式(进程内调用)带来额外的性能开销。
  • 配置复杂性: 需要单独启动和管理服务器进程,比嵌入式模式多了一步配置。
  • 安全性: 默认配置不安全,需要额外配置才能保证安全。
  • 功能限制: 相比商业数据库,其高级功能和性能优化能力有限。

特性 描述
用途 实现客户端/服务器架构,允许多个远程客户端访问同一个 Derby 数据库。
启动方式 使用 java -jar derbyrun.jar server start 命令。
默认端口
分享:
扫描分享到社交APP
上一篇
下一篇