18

我有以下问题:两个不同系统上的应用程序的两个实例应该共享一个小型数据库。主要问题是两个系统只能通过网络文件夹交换数据。我没有可能在某处设置数据库服务器。

是否可以在网络文件夹上放置一个 H2 数据库并让两个实例都连接到数据库(也可以同时连接)?

如果我禁用文件锁定,我可以使用嵌入式模式将两个实例连接到数据库,对吗?这些实例可以在数据库上执行 READ 或 INSERT 操作。使用多个并发嵌入式连接是否有数据损坏的风险?

4

2 回答 2

47

我有同样的问题,我在文档中找到了解决方案。可以在以下位置找到;http://h2database.com/html/features.html#auto_mixed_mode

多个进程可以访问同一个数据库,而无需手动启动服务器。为此,请将 ;AUTO_SERVER=TRUE 附加到数据库 URL。无论数据库是否已打开,您都可以使用相同的数据库 URL。此功能不适用于内存数据库。

// Application 1:
DriverManager.getConnection("jdbc:h2:/data/test;AUTO_SERVER=TRUE");

// Application 2:
DriverManager.getConnection("jdbc:h2:/data/test;AUTO_SERVER=TRUE");
于 2014-11-25T14:27:52.320 回答
3

来自 H2 文档

也可以不锁定文件打开数据库;在这种情况下,由应用程序来保护数据库文件。否则将导致数据库损坏。

我认为如果您的应用程序始终使用相同的配置(网络文件夹上的共享文件数据库),您需要创建一个管理并发的应用程序层

于 2012-09-13T08:23:20.583 回答