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

新手上路,请多包涵

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

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

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

但是我收到以下错误:

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

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

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

原文由 Vasilis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
2 个回答

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 模式启动服务器。老实说,它在文档中非常简单。

强制终止该进程(对于 Windows 为 javaw.exe),并确保关闭可能已启动它的所有应用程序。你有一把主动锁。

原文由 Daniel B. Chapman 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有同样的问题。在 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

祝你好运

原文由 Saman Salehi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题