在不同的程序中同时使用相同的数据库

时间:2015-05-25 07:42:12

标签: java database h2

我正在使用H2数据库引擎for java来访问我的java程序中的数据库。我开发了许多使用相同数据库的java程序。问题是每当我启动这样一个程序而另一个程序已经运行时,它就无法访问数据库,因为它是由另一个程序打开的。 有没有办法让两个程序都连接到数据库?每当一个程序必须查询数据库时,数据库应该执行查询。如果它正在执行另一个程序的查询,则应该在查询其他程序之后直接执行查询。由于我的查询不需要很长时间,用户不会意识到他的程序必须等待片刻,一切都会好的。

1 个答案:

答案 0 :(得分:1)

H2服务器模式是你想要的。

您至少需要以这种方式启动服务器,例如:

org.h2.tools.Server.createTcpServer().start();

然后将所有jdbc url替换为jdbc:h2://yourhost/yourdb,请记住yourdb.h2.db将位于服务器启动的位置。我强烈建议不要在jdbc url中使用绝对路径,因为它会在黑客攻击时泄露数据库路径。

最后但同样重要的是:对所有人使用服务器模式会有性能损失。您可能希望使用混合模式,以便第一个客户端具有几乎嵌入的性能。

要执行此操作,只需使用jdbc:h2:yourdb;AUTO_SERVER=TRUE替换此客户端的网址。您可以决定对所有客户端使用相同的URL:第一个连接将使用嵌入模式,其他客户端将使用tcp性能。

请注意,如果您使用H2> 1.4。*,你需要给出这样的绝对或相对路径:jdbc:h2:./yourdb;AUTO_SERVER=TRUE。请注意./