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

时间:2016-08-31 20:41:35

标签: 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://

中的另一个文件夹

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您希望以客户端/服务器模式连接到Firebird服务器,并将数据库的文件名传递给它。 "主机:端口" part连接到服务器,接下来是" /"是数据库文件的名称。

如果您使用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服务器所在的帐户在另一台机器上有足够的访问权限。