数据库锁获取失败和hsqldb [英] Database lock acquisition failure and hsqldb
问题描述
我正在尝试连接到hsql数据库.我通过从C:\ myhsql运行来创建一个:
I was trying to connect to a hsql db. I created one by running from C:\myhsql:
java -cp .;C:\hsql\lib\hsqldb.jar org.hsqldb.Server -database.0 file:db\mydb -dbname.0 MYDB
这在名为db
的目录中创建了mydb
.现在,该文件夹在当前文件夹中具有一个名为mydb的.lck,tmp,script,properties文件,以及名为MYDB的类似文件.
This created mydb
in a directory called db
. This folder now has a .lck,tmp,script,properties files with name mydb, and similar files with name MYDB in current folder .
在我尝试过的Java代码中
In java code I tried
Class.forName("org.hsqldb.jdbcDriver");
connection = DriverManager.getConnection("jdbc:hsqldb:file:db/sjdb", "SA", "");
运行程序时,出现此错误:
When I run the program, I am getting this error:
java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@f3811c1a[file =C:\myhsql\db\mydb.lc
k, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2010-10-19 12:46:09 heartbeat - read: -6750 ms.
...
这是堆栈跟踪:
java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@f3811c1a[file =C:\myhsql\db\sjdb.lc
k, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2010-10-19 12:46:09 heartbeat - read: -6750 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(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at ConnectHSQLDB.main(ConnectHSQLDB.java:20)
Caused by: org.hsqldb.HsqlException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile@f3811c1a[file =C:\myhsql\db\sjdb.lck, exists=true, locked=false, valid=false, ] method: checkHeartbeat read: 2010-10-19 12:46:09 heartbeat - read: -6750 ms.
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.persist.LockFile.newLockFileLock(Unknown Source)
at org.hsqldb.persist.Logger.acquireLock(Unknown Source)
at org.hsqldb.persist.Logger.openPersistence(Unknown Source)
at org.hsqldb.Database.reopen(Unknown Source)
at org.hsqldb.Database.open(Unknown Source)
at org.hsqldb.DatabaseManager.getDatabase(Unknown Source)
at org.hsqldb.DatabaseManager.newSession(Unknown Source)
... 6 more
java.lang.NullPointerException
at ConnectHSQLDB.main(ConnectHSQLDB.java:32)
有人可以告诉我我做错了什么吗?我可以使用SwingDBManager连接到数据库,并且可以insert
,delete
和select
记录数据库中.尝试Java代码时,我没有运行DBManager.仍然发生锁定问题.
Can somebody tell me what I am doing wrong? I can connect to the db using SwingDBManager and can insert
, delete
, and select
records in the db. I was not running DBManager when I tried the java code. Still the lock problem happens.
推荐答案
第一个命令启动服务器.该服务器锁定数据库文件,以便其他"不能修改它们.您应该使用"-dbname.0 mydb"而不是"MYDB",因为它应该是小写字母.
The first command starts a server. This server locks the database files so that "others" cannot modify them. You should use "-dbname.0 mydb" instead of "MYDB" as it should be in lowercase.
您用于连接数据库的Java连接URL错误.您应该使用"jdbc:hsqldb:hsql://localhost/mydb"作为连接字符串.当数据库文件被服务器锁定时,您可以访问数据库服务器,但不能使用文件URL访问数据库正在处理".
Your Java connection URL to connect to the database is wrong. You should use "jdbc:hsqldb:hsql://localhost/mydb" as the connection string. While the database files are locked by the server, you can access the database server but you cannot access the database "in-process" with a file: URL.
这篇关于数据库锁获取失败和hsqldb的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!