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

标签 java firebird firebird2.5 jaybird

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

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

enter image description here

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

enter image description here

我知道如果我的数据库在我的驱动器中(例如,在 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";

发生异常的原因显然是 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

关于java - 使用 Jaybird 连接到位于本地网络计算机中的 Firebird 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39258644/

相关文章:

java - 如何扩展 wsimport 生成的带有 WebFault 注释的异常?

sql - Firebird 将输入参数传递给 gen_id 函数

sql - Firebird - 获取触发器内所有修改的字段

Firebird 在 select 语句中根据同一行字段中的 bool 值进行多次求和

firebird - 需要跟踪 Firebird 2.5 上的大型更新语句

ruby-on-rails-3 - 将firebird数据库与rails 3连接

java - Mac 上不显示 GUI?

java - 使用 CAMEL 处理确认?

java - hadoop 日志中的 "complete event for unknown container id"是什么意思?

sql - 在 firebird 中使用 iif 更新 varchar 字段时出现空格