Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jaybird连接到位于本地网络计算机中的Firebird数据库_Java_Firebird_Firebird2.5_Jaybird - Fatal编程技术网

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

Java 使用Jaybird连接到位于本地网络计算机中的Firebird数据库,java,firebird,firebird2.5,jaybird,Java,Firebird,Firebird2.5,Jaybird,我正在创建一个java应用程序,它连接到Firebird数据库并检索一些数据。程序已经完成,并且在我的计算机上运行良好。问题是,在我需要运行应用程序的计算机中,数据库位于本地网络中的另一台计算机中,我不知道应该将哪个路径放入jaybird的连接字符串中以使其运行。让我解释一下: 我需要在计算机X中运行我的应用程序,但实际的数据库不在计算机的驱动器中,而是在本地网络中的计算机中。类似这样的东西(这是一个例子,它在我家复制,而不是在我需要让它工作的实际站点): 因此,它为数据库提供的路径类似于:

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

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

因此,它为数据库提供的路径类似于:

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

我知道如果我的数据库在我的驱动器中(例如,在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在这两台电脑上都运行

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

编辑

为便于记录,问题的解决方案如下:

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

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

发生异常的原因显然是,jaybird与服务器中的
users
文件夹存在一些权限问题。由于my DB位于
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服务器服务的帐户具有读写访问权限(网络服务或本地系统,我忘记了,我目前没有访问Windows计算机的权限)

其他说明:

  • Firebird数据库的位置不应共享,因为远程访问数据库应通过Firebird服务器完成
  • 您应该真正更新到Jaybird 2.2.11;2.2.1已使用了将近4年,自那时起,许多已被修复
  • <>如果你真的使用火鸟2.5(0),那么升级到2.5.6,或者考虑升级到3
看起来您希望以客户机/服务器模式连接到Firebird服务器,并将数据库的文件名传递给它。“主机:端口”部分连接到服务器,下一个“/”后面是数据库文件的名称

如果使用
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解析的名称,这并不困难,在
主机
名称中输入就足够了。端口3050实际上是默认端口,因此可以忽略它

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

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

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

使用
\\DESKTOP-1UFA09I\Documents\TEST1.FDB无法工作,因为Firebird不会通过网络共享打开数据库,只能通过本地磁盘打开数据库。如果目标服务上没有运行数据库,则会导致另一个错误。答案是正确的,但最终问题出在数据库的实际位置。它位于服务器的用户文件夹中,显然jaybird没有访问该文件夹的权限folder@angel208杰伯德就是天秤座的人