与Derby有额外的连接(只读)

Ben*_*Inc 8 database-connection derby

我想做什么:我的应用程序与Derby DB完全连接,我想在DB(只读)中并行(使用不同的工具).

我不确定Derby在内部是如何工作的,但我知道我只能有一个与Derby DB的活动连接.但是,由于数据库只包含我的硬盘上的文件,我是否应该能够以只读模式打开其他连接?

有没有工具可以做到这一点?

amr*_*mra 9

如何运行Apache Derby DB有两种可能性.

  1. 嵌入式:您在应用程序中运行DB→只能连接一个连接
  2. 客户端:在单独的进程→具有多个连接的经典DB中启动DB作为服务器

您可以根据驱动程序大小识别类型.如果驱动程序超过2MB,则使用嵌入式版本.

更新

启动derby引擎(服务器或嵌入式)时,它将获得对数据库文件的独占访问权限.

如果需要从多个Java虚拟机(JVM)访问单个数据库,则需要安装服务器解决方案.您可以允许来自需要访问该数据库的多个JVM的应用程序连接到服务器.

有关详细信息,请参阅双启动系统行为.


Ber*_*amb 5

我意识到这是一个老问题,但我想我可能会在解决方案上添加更多细节,因为当前接受的答案中的链接已被破坏.

可以在已使用嵌入式数据库的JVM中运行Derby Network Server.使用嵌入式Derby数据库的代码不需要更改任何内容,并且可以继续使用DB,但是在启动Derby Network Server的情况下,其他程序可以连接到derby并访问数据库.

您需要做的就是确保derbynet.jar位于类路径上

然后您可以执行以下操作之一

  • 在derby.properties文件中包含以下行: derby.drda.startNetworkServer=true

  • 在java start中将该属性指定为系统属性 java -Dderby.drda.startNetworkServer=true

  • 您可以使用NetworkServerControl API从Java应用程序中的单独线程启动网络服务器: NetworkServerControl server = new NetworkServerControl(); server.start (new PrintWriter(System.out));

更多细节:http://db.apache.org/derby/docs/10.9/adminguide/tadminconfig814963.html

请记住,这样做不会在此连接上启用任何安全性,因此在生产系统上执行此操作不是一个好主意.虽然可以添加安全性,但可以在此处记录:http://db.apache.org/derby/docs/10.9/adminguide/cadminnetservsecurity.html