连接 HSQL 数据库管理器时无法从 Java 代码连接到 HSQL 数据库
Posted
技术标签:
【中文标题】连接 HSQL 数据库管理器时无法从 Java 代码连接到 HSQL 数据库【英文标题】:Can't connect to HSQL Database from Java code when HSQL Database Manager is Connected 【发布时间】:2017-06-08 11:14:17 【问题描述】:当我打开并连接 HSQL DB Manager (Swing) 时,Java 代码无法连接到数据库并抛出此问题:
java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@cf53680[file =C:\somedb\db.lck ...
但只要我从数据库管理器关闭与数据库的连接,Java 代码就会开始正常工作。
这是什么?
【问题讨论】:
先删除.lck文件并运行prog 使用 SQLite 数据库?如果是这样,您不能有并发连接,请改用生产就绪数据库,例如 MariaDB、mysql、PostgreSQL 等,,, @Satya 只是删除锁不是一种选择。 HSQL 连接需要锁定数据库以防止任何其他访问。当数据库连接关闭,然后其他客户端可以连接时,锁定文件将消失。使用生产就绪数据库是解决方案 亲爱的萨蒂亚,我在谷歌上读过这个……但这没有帮助:( 感谢@jamesc 的知识分享 【参考方案1】:HSQLDB 主要是一个嵌入式 数据库引擎。这意味着如果您以嵌入式方式运行它,则只有一个进程(=JVM)可以使用数据库。来自其他进程的连接是不可能的。
解决这个问题的唯一方法是在 服务器 模式下启动 HSQLDB,其中 HSQLDB 在自己的进程 (JVM) 中运行并接受来自其他进程的连接 - 与“传统”数据库服务器的设置基本相同像 Postgres 或 Oracle。
手册中记录了如何在服务器模式下启动 HSQLD 的详细信息:
http://hsqldb.org/doc/2.0/guide/running-chapt.html#rgc_server_modes
【讨论】:
@Giorgi Tsiklauri,我建议这是您的解决方案以上是关于连接 HSQL 数据库管理器时无法从 Java 代码连接到 HSQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException:无法从底层数据库获取连接! — HSQLDB
从 DatabaseSwingManager 连接时 HSQL 服务器模式引发异常 java.sql.SQLTransientConnectionException