1. java.sql.SQLException: Database lock acquisition failure: lockFile: org.hsqldb.persist.LockFile..., exists=true, locked=false, valid=false, ] method: checkHeartbeat
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
这种异常说明有活动进程占用锁资源,对于In-Process (Standalone) Mode 的hsqldb, 文件系统中的数据只能允许一个进程访问。当停掉原来进程后,其他进程可以访问数据库文件系统中的数据。注意路径一定要正确。
2. java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: xxxxxxxx
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
这种异常说明连接上的数据库里找不到相应的表或其他资源,通常会出现在In-Process (Standalone) Mode 的hsqldb和Memory-Only Databases的情况下。
因为这两种情况下,数据库只能在同一个进程中访问。如果试图从另外进程访问,则可能访问的不是预期的数据库。比如连接上新进程中的内存数据库。从而造成试图访问不存在的表和数据库资源的错误。
3. 路径指向很重要
url="jdbc:hsqldb:file:data/hsqldb/hsqldb" 是指向/data/hsqldb/下,以hsqldb命名的数据库资源。
如果此时用url="jdbc:hsqldb:file:data/hsqldb",则连接的不是同一个数据库。
4. 用于测试HSQLDB特性的代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.hsqldb.server.Server;
public class HsqldbTest
{
public static void main(final String[] args)
{
System.out
.println("B Call opConn1 in HsqldbTest: ====================&