arquillian + HSQLDB 单元测试问题整理

本文介绍了在使用Arquillian进行单元测试时遇到的HSQLDB相关问题,包括数据库锁获取失败和权限不足的错误。通过分析错误原因,指出In-Process (Standalone) Mode的HSQLDB只允许一个进程访问,并提供了测试HSQLDB特性的代码示例,演示了如何创建、连接和操作数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 的hsqldbMemory-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: ====================&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值