我做了同样的配置,花了几个小时后我找到了解决方案:
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 系统变量。
另一件事(显而易见,但比抱歉更安全):此配置必须在远程数据库(您的请求将到达的地方)设置,以防像我一样,您有两台机器都在运行数据库。