2

我正在创建一个连接到 Firebird 数据库并检索一些数据的 Java 应用程序。程序完成了,它在我的电脑上运行良好。问题是,在我需要运行应用程序的计算机中,数据库位于本地网络中的另一台计算机中,我不知道应该将哪个路径放入 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 地址。但这给了我一个例外,说应用程序无法找到数据库。我认为这是我找到解决方案的最接近的方法,但我没有运气。一些额外的信息:

  • 两台计算机都关闭了防火墙,并且可以相互发送 ping,因此它们实际上是连接的。

  • 我正在使用 Firebird 2.5 和 jaybird 2.2.1。

  • 我还尝试了以下方法,但没有成功:

    static final String FB_DB_URL =  "jdbc:firebirdsql://192.168.0.101:3050/C:\\users\\john2\\Documents\\TEST1.FDB"; 
    
  • 该文件夹是共享的(或者至少,我是这么认为的),因为我可以通过 Windows 访问它,并且数据库文件为每个人提供读/写权限。

  • 我确信 Firebird 正在两台 PC 上运行。

对于此事的任何帮助将不胜感激。我确定问题出在路径上,因为正如我所说,该应用程序可以很好地与我计算机中的数据库配合使用。此外,如果你能给我一个不需要存储数据库的计算机 IP 的解决方案,那将是很棒的,但我想我无论如何都能得到这些信息。

编辑

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

制作数据库路径的正确方法是:

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

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

4

2 回答 2

4

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

  • 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
于 2016-09-01T06:44:32.603 回答
1

看起来您想以客户端/服务器模式连接到 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 服务器在另一台机器上具有足够访问权限的帐户。

于 2016-09-01T06:54:58.683 回答