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

时间:2010-09-09 16:16:24

标签: database-connection derby

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

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

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

4 个答案:

答案 0 :(得分:7)

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

  1. Embedded:您在应用程序中运行DB→只能连接一个
  2. Client:您在单独的流程→具有多个连接的经典数据库
  3. 中启动数据库作为服务器

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

    更新

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

      

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

    有关详细信息,请参阅Double-booting system behavior

答案 1 :(得分:5)

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

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

您需要做的就是确保derbynet.jar is on the classpath

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

  • 在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

答案 2 :(得分:1)

另外两个想法:

  1. 在应用程序中,关闭数据库并在数据库未主动使用时关闭连接。然后,您的应用程序不会干扰尝试打开数据库的其他工具。
  2. 通过备份制作数据库的副本(您可以在应用程序打开数据库时执行此操作),然后将该备份还原到磁盘上的单独位置。然后,您可以使用其他工具轻松访问复制的数据库。

答案 3 :(得分:1)

如果您可以负担内存并且不需要最新数据,那么您可以通过创建内存副本从多个JVM访问只读数据库:

ij> connect 'jdbc:derby:memory:memdb;restoreFrom=mydb';