【问题标题】:hsqldb : Database lock acquisition when connecting to a file dbhsqldb : 连接到文件 db 时获取数据库锁
【发布时间】:2013-04-16 13:57:01
【问题描述】:

我正在尝试连接到 hsqldb(使用版本 2.2.9)。

我使用以下方法创建了一个:

java -cp hsqldb-2.2.9.jar org/hsqldb/util/DatabaseManagerSwing

当尝试通过我的 ui 连接到数据库时,出现以下异常:

Exception occured :  java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@76e90d02[file =/rhel5pdi/home/mgnyp/workspace/src/Project/webapp/WEB-INF/lib/testDataBase.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2013-04-23 10:35:22 heartbeat - read: -8403 ms.
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source)
    at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source)
    at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:185)

我认为数据库被锁定是因为 DatabaseManagerSwing 在我的 ui 之前建立了连接,所以我关闭了那个。 这导致了以下异常:

 Exception occured :  java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@76e90d02[file =/rhel5pdi/home/mgnyp/workspace/src/PmtMetricsUI2/webapp/WEB-INF/lib/testDataBase.lck, exists=false, locked=false, valid=false, ] method: openRAF reason: java.io.FileNotFoundException: /rhel5pdi/home/mgnyp/workspace/src/Project/webapp/WEB-INF/lib/testDataBase.lck (Permission denied)
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCConnection.<init>(Unknown Source)
    at org.hsqldb.jdbc.JDBCDriver.getConnection(Unknown Source)
    at org.hsqldb.jdbc.JDBCDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:185)

我正在使用 spring mvc 和 c3p0。 连接详情(提供的数据库的绝对路径):

Connection con = DriverManager.getConnection("jdbc:hsqldb:file:/home/mgnyp/workspace/src/Project/webapp/WEB-INF/lib/testDataBase", "SA", "");

我试过这种方法,不幸的是没有成功: Database lock acquisition failure and hsqldb

我还在 hsql.org 上查找了文档

抱歉,如果问题很明显,我以前从未使用过 hsql。

如果有任何帮助或提示,我将不胜感激。

谢谢。

【问题讨论】:

  • 您是否正在尝试打开已被 webapp 使用的数据库?
  • 嗨 shyam,谢谢您的回复。我只是发现了一个我不知道的与该数据库的挂起连接,因此锁定了。它现在可以工作了,负责建立连接的代码有一个设计流程。我花了几个小时才意识到这一点(这就是我将其作为问题发布的原因)
  • @mgnyp 我也有同样的问题。您能解释一下如何解决吗?

标签: java hsqldb


【解决方案1】:

我可以通过将 ;readonly=true 作为附加连接字符串的属性来禁用锁定文件。否则我发现锁总是为文件数据库保留的。对我有用的示例连接字符串是 jdbc:hsqldb:file:my/file/location;readonly=true

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。刚刚删除了 .lck (lock ) 文件并重新连接。现在它工作正常。

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 2014-12-16
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多