【问题标题】:How to connect to JavaDB from another computer?如何从另一台计算机连接到 JavaDB?
【发布时间】:2015-06-28 21:04:26
【问题描述】:

我正在尝试学习一些基本的 JDBC。

  • 我已经创建了一个 JavaDB 服务器并制作了一个我可以读取的 Java 程序 并修改数据库中的一些表。
  • 我认为下一步能够连接到 来自同一网络上运行的另一台计算机的服务器,甚至 来自互联网,如果相似的话。
  • 到目前为止,我刚刚尝试在另一台计算机上打开项目,看看是否 它会连接到本地主机,但也希望它也是 简单...

当前数据库名称为"jdbc:derby://localhost:1527/test;user=db;password=db"

  1. 我可以用我的 ipv4 地址替换本地主机来连接吗 本地?或
  2. 我真的需要路由器的 IP 并做一些端口转发吗?

本地连接是我真正需要的。如果这更容易,那么这就是我想做的。

【问题讨论】:

  • 使用您的系统 ip 代替 localHost。它会起作用。

标签: java jdbc derby javadb


【解决方案1】:

我做了同样的配置,花了几个小时后我找到了解决方案: http://db.apache.org/derby/docs/10.2/adminguide/derbyadmin.pdf

第 34 页:

默认情况下,Derby Network Server 将只侦听 localhost (...)

一种解决方案是创建一个包含以下内容的 [derby.properties] 文件: derby.drda.host=0.0.0.0

您保存属性文件的位置可能会有所不同:

- 在我的一台机器上,它直接位于“javadb”、“bin”、“lib”等的同级机器下

- 在我的第二台机器上,它位于“bin”目录下,是 *.bat 文件的兄弟。

要验证您的属性是否正在被读取(起初它不存在,Derby 文档明确告诉它不会为您创建它),也需要添加此属性: derby.stream.error.file=derbyNewLog.log

如果你执行 bin/startNetworkServer 如果您的属性被正确读取,它将创建新的日志文件。

确认您的新属性文件正在被读取后,您可以使用 bin/ij 工具对您的数据库(本地和远程)执行连接语句。这就是我可以快速验证它的方式(我的数据库名称是 'differentRequestsAndPerformance'):

c:\glassfish4\javadb\bin>ij
ij version 10.10
ij> connect 'jdbc:derby://localhost:1527/differentRequestsAndPerformance';
ij> show tables;
TABLE_SCHEM         |TABLE_NAME                    |REMARKS
------------------------------------------------------------------------
SYS                 |SYSALIASES                    |
(...)
ij> disconnect;
  >> this 'connect' with localhost is expected to work always - you can append ';create=true' to the DB name in case it doesn't exist already; now change it to your remote ip (I'm assuming you previously confirmed with 'ping' command that you actually can see the server remote machine, otherwise it's a network problem, not a Derby problem)

ij> connect 'jdbc:derby://192.168.1.14:1527/differentRequestsAndPerformance';
ij> show tables;
TABLE_SCHEM         |TABLE_NAME                    |REMARKS
------------------------------------------------------------------------
SYS                 |SYSALIASES                    |
(...)
ij> disconnect;

还有一条评论:我不确定 0.0.0.0 设置会在多大程度上将您的计算机打开到恶意软件,因为我只想验证我的代码,并且在我满意后立即将其禁用。如果您想将其用于实际程序,则需要对此进行更多研究。

如果您的 'ij' 工具抱怨某些驱动程序,请将 javadb/lib 目录添加到 CLASSPATH 系统变量。

另一件事(显而易见,但比抱歉更安全):此配置必须在远程数据库(您的请求将到达的地方)设置,以防像我一样,您有两台机器都在运行数据库。

【讨论】:

    【解决方案2】:

    所以,我建议您查看防火墙设置,如果防火墙没有阻止,或者您可以尝试与另一个端口通信。如果这两件事都不起作用,请告诉我,在吐出这个错误之前需要多长时间。另外,在命令提示符下,尝试 ping machineIP 并查看它是否正在发送和接收数据

    【讨论】:

    • 我尝试在防火墙和您在浏览器中输入您的 ip 时访问的网页上打开该端口。我尝试了几种不同的 Web 服务来检查端口是否打开,但他们都说它仍然关闭。我无法弄清楚我做错了什么。我还尝试禁用防火墙片刻,但没有成功。
    【解决方案3】:

    您需要打开路由器上的 1527 端口。 你可以试试这个答案 https://stackoverflow.com/a/12176840/2746009

    【讨论】:

      【解决方案4】:

      您需要使用主机名或要连接的盒子的 IP:

      URI:jdbc:derby://<hostname_or_ip>:1527/test;user=db;password=db

      <hostname_or_ip> 替换为实际值,您就可以开始了。

      【讨论】:

      • 谢谢。它崩溃并说连接被拒绝,我尝试用谷歌搜索它,当服务器未运行或防火墙阻止连接时,这似乎是一个问题。我知道服务器正在运行,因为它可以与 localhost 一起使用,而且除了标准的 Windows 防火墙之外,我没有任何防病毒软件。有什么建议吗?
      • 你能ping你试图连接的主机吗?此外,尝试对 host:port 执行 telnet
      • 对不起,我对网络的东西真的很陌生。我试图打开 cmd 并输入 ping 192.168.0.102:1527。它说它没有找到,如果我用 ip 地址更改 ipv4 地址也是一样的。这是否意味着它无法连接,或者我是否弄错了命令?我还为您的其他建议尝试了 puttytel,尝试连接到 ipadress:port,它说连接被拒绝。所以我想我应该以某种方式打开端口 1527?
      • ping 仅适用于主机名;对于telnet,你应该这样做:telnet your_host port
      • telnet 无法被 Windows 8.1 识别,主机名是什么?我只有一个 ip 和端口
      猜你喜欢
      • 1970-01-01
      • 2013-01-16
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2012-03-01
      • 1970-01-01
      相关资源
      最近更新 更多