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