hsqldb:连接到文件db时获取数据库锁

时间:2013-04-23 11:13:19

标签: java hsqldb

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

我使用以下内容创建了一个:

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

当尝试通过我的ui连接到db时,我遇到以下异常:

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。

我希望得到任何帮助或提示。

谢谢。

2 个答案:

答案 0 :(得分:12)

我能够通过包含; readonly = true作为附加连接字符串上的属性来禁用锁定文件。否则,我发现锁定始终是为文件数据库保留的。适合我的示例连接字符串是jdbc:hsqldb:file:my / file / location; readonly = true

答案 1 :(得分:0)

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