H2 数据库错误:数据库可能已在使用中:“被另一个进程锁定”

2022-08-31 17:10:25

我正在尝试从Java应用程序使用H2数据库。

我通过H2控制台创建了数据库及其表,然后尝试使用Java进行连接

Connection con = DriverManager.getConnection("jdbc:h2:~/dbname", "username", "password");

但是,我收到以下错误:

线程“main” org.h2.jdbc.JdbcSQLException中的异常:数据库可能已在使用中:“被另一个进程锁定”。可能的解决方案:关闭所有其他连接;使用服务器模式 [90020-161]

我试图删除该文件,但它会自动重新创建。dbname.lock.db

如何解锁数据库以从我的Java程序中使用它?


答案 1

H2仍在运行(我可以保证)。您需要对多个用户使用 TCP 连接,例如 ->

<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/C:\Database\Data\production;"/>

DriverManager.getConnection("jdbc:h2:tcp://localhost/server~/dbname","username","password");

这也意味着您需要在TCP模式下启动服务器。Honesetly,它在文档中非常简单。

强制终止进程(javaw.exe适用于 Windows),并确保已关闭任何可能已启动它的应用程序。您有一个活动锁。


答案 2

我遇到了同样的问题。在Intellj中,当我的程序运行时,当我想使用h2数据库时,我得到了同样的错误。为了解决这个问题,我更改了连接网址

spring.datasource.url=jdbc:h2:file:~/ipinbarbot

自:

spring.datasource.url=jdbc:h2:~/ipinbarbot;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE

然后我的问题就消失了。现在,当我的程序是时,我可以连接到“ipinbarbot”数据库。如果您使用Hibernate,也不要忘记:

spring.jpa.hibernate.ddl-auto = update

好运气


推荐