使用 Jaybird 连接到位于本地网络计算机中的 Firebird 数据库

Using Jaybird to connect to a Firebird database located in a computer in a local network

我正在创建一个 java 应用程序,它连接到 Firebird 数据库并检索一些数据。该程序已完成,并且 运行 在我的计算机中运行良好。问题是,在我需要 运行 应用程序的计算机中,数据库位于本地网络中的另一台计算机中,我不知道应该将哪个路径放入 jaybird 的连接字符串中以获取它 运行宁。让我解释一下:

我需要运行我的应用程序在一台电脑X上,但实际的数据库并不在电脑的驱动器中,而是在局域网中的电脑中。像这样的东西(这是一个例子,它是在我家复制的,而不是在我需要让它工作的实际站点上复制的):

所以它给我的数据库路径是这样的:

我知道如果我的数据库在我的驱动器中(例如,在 C:\Users\john\Desktop 中),我使用 Jaybird 与数据库的连接应该是这样的:

static final String FB_DB_URL = "jdbc:firebirdsql://localhost:3050/C:\Users\john\Desktop\TEST1.FDB";

FB_connection = DriverManager.getConnection( FB_DB_URL , FB_USER , FB_PASS);

实际上,这就是我设法让它在我的电脑上工作的方式。但在这种情况下,我不知道路径应该如何。我试过类似的东西:

    static final String FB_DB_URL =  "jdbc:firebirdsql://192.168.0.101:3050/\\DESKTOP-1UFA09I\Documents\TEST1.FDB"; 

其中'192.168.0.101'是数据库所在计算机的ipv4地址。但这给了我一个异常,说应用程序无法找到数据库。我认为这是我最接近找到解决方案的时间,但我没有运气。 一些额外信息:

如有任何帮助,我们将不胜感激。我确定问题出在路径上,因为正如我所说,该应用程序与我计算机中的数据库一起运行良好。另外,如果你能给我一个不需要存储数据库的计算机的 IP 的解决方案,那就太棒了,但我想我无论如何都能得到这些信息。

编辑

出于记录目的,问题的解决方案如下:

创建数据库路径的正确方法是:

"jdbc:firebirdsql://192.168.0.101:3050/C:\folder1\folder2\TEST1.FDB";

出现异常的原因显然是 jaybird 对服务器中的 users 文件夹存在一些权限问题。由于我的数据库位于 documents 文件夹中,因此当 jaybird 试图访问它时会导致一些问题。解决方案是将数据库移动到 C://

中的另一个文件夹

要连接到远程数据库,您需要了解以下内容:

  • Firebird 服务器的主机名或 IP 地址
  • Firebird服务器的端口号(默认3050)
  • 用户名和密码
  • 数据库的别名数据库的完整路径

您似乎涵盖了前三项,所以问题出在第四项上。您认为数据库位于 C:\users\john2\Documents\TEST1.FDB。如果是这样的话,那么 JDBC url 就是:

jdbc:firebirdsql://192.168.0.101:3050/C:\users\john2\Documents\TEST1.FDB

但是,出于安全原因,用户 运行 Firebird 服务器进程默认 无权访问 用户文件夹。

我建议你将数据库移动到用户文件夹之外的位置,并确保帐户运行 Firebird 服务器服务具有读写权限(NETWORK SERVICE 或 LOCAL SYSTEM,我忘记了哪个我目前无法访问 Windows 机器)。

其他说明:

  • Firebird 数据库的位置应该共享,因为远程访问数据库应该通过 Firebird 服务器
  • 你真的应该更新到 Jaybird 2.2.11; 2.2.1 已经快 4 岁了,自
  • 以来已经修复了很多问题
  • 如果你真的使用Firebird 2.5(.0),那么升级到2.5.6,或者考虑升级到3.0

您似乎想以 client/server 模式连接到 Firebird 服务器并将数据库的文件名传递给它。 "host:port"部分连接服务器,后面的“/”是数据库文件名。

如果您使用 192.168.0.101:3050,您必须确保服务器在具有 IP 192.168.0.101 的另一台机器上运行。由于服务器已经在另一台机器上,您需要为其提供该机器上数据库名称的本地名称,如

static final String FB_DB_URL =  "jdbc:firebirdsql://192.168.0.101:3050/C:\users\john2\Documents\TEST1.FDB"; 

要不使用 IP,您需要为该计算机指定一个名称,该名称可以在本地网络中进行 DNS 解析,这并不困难,hosts 名称中的一个条目就足够了。端口 3050 实际上是默认端口,因此您可以省略它。

因为这不起作用我猜服务器不在目标机器上 运行,只有数据库文件在那里。在这种情况下,您应该连接到您的本地服务器,但让它知道网络可访问的数据库文件名,如

static final String FB_DB_URL =  "jdbc:firebirdsql://localhost/\\DESKTOP-1UFA09I\Documents\TEST1.FDB"; 

它应该允许本地 Firebird 服务器通过本地网络打开 \DESKTOP-1UFA09I\Documents\TEST1.FDB 文件 - 当然如果网络共享 DESKTOP-1UFA09I 指向正确的位置和本地 Firebird 使用的帐户服务器在另一台机器上有足够的访问权限。