路径无关的 Derby 网络数据库服务

Path independent Derby network database service

我有一个服务器端应用程序,它使用这个 URL:

创建了一个数据库
jdbc:derby:abssposdb;create=true

这将在项目文件夹中创建 derby 数据库。 我正在使用以下代码启动该数据库的网络服务器

String[] args = {"start", "-h", "0.0.0.0", "-p", "4321"};
    try {
        org.apache.derby.drda.NetworkServerControl.main(args);
    } catch (Exception e) {

    }

现在,为了连接到这个数据库,我必须使用的URL是

jdbc:derby://192.168.1.12:4321/C:\Users\mtahm\Documents\NetBeansProjects\derbyEmbeded\abssposdb

如您所见,必须指定整个路径。这是一个问题,因为对我来说,因为我需要使用下面的 URL 访问此 derby 服务器,以便整个应用程序将是动态的

jdbc:derby://192.168.1.12:4321/abssposdb

我猜想需要某种后台服务或类似的东西,但我不知道如何做到这一点。有这样做的技术吗?我的整个项目都在 Java.

不要使用 "jdbc:derby:abssposdb;create=true" 创建数据库,因为它旨在创建嵌入式数据库。服务器不知道您正在创建的嵌入式数据库,这就是您需要指定此数据库的完整路径的原因。 要创建可通过简单名称访问的数据库,您需要做的就是使用特殊连接 URL 连接到此服务器(在您通过 NetworkServerControl.main() 启动它之后),就像这样:

jdbc:derby://192.168.1.12:4321/abssposdb;create=true

注意 "create=true" 在这个 URL 的末尾,这将创建可在 url jdbc:derby://192.168.1.12:4321/abssposdb 上访问的数据库,如果它尚不存在,或者如果存在则连接到它。

Derby Network Server 通过根据 derby.system.home、Derby Network Server 的 "home" 目录解释这些相对路径名来定位以相对路径名命名的数据库。

有关 derby.system.home 的更多信息,请参阅:http://db.apache.org/derby/docs/10.11/ref/rrefproper32066.html

您可以通过控制 Derby Network Server 的 derby.system.home 值来控制连接 URL 的数据库名称部分的解释。这里有更多信息:http://db.apache.org/derby/docs/10.11/devguide/cdevdvlp34964.html#cdevdvlp34964

因此:您的数据库可以位于任何地方;您的 Derby Network Server 可以 运行 在任何机器上,并且可以为该机器上的任何数据库请求提供服务。但是,要将这些东西结合在一起,您需要为要存储数据库的位置建立一些组织和策略,并且通过使用像 derby.system.home 这样的约定,您可以确保您的数据库不会分散在各处,但都收集在一个位置,供您在需要备份、升级等时查找。