You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HSQLDB内存数据库无法查看表,如何调试集成测试数据?

调试HSQL内存数据库数据的实用方法

1. 切换到支持外部连接的服务器模式

默认的内存库(jdbc:hsqldb:mem:testdb)是进程私有,外部客户端无法访问。改成服务器模式就能用SQL客户端连接查看:

  • 修改测试用的JDBC URL为 jdbc:hsqldb:hsql://localhost/testdb
  • 在测试启动前初始化HSQL服务器:
import org.hsqldb.server.Server;

public class HsqlServerBootstrap {
    public static void initServer() {
        Server server = new Server();
        server.setDatabaseName(0, "testdb");
        server.setDatabasePath(0, "mem:testdb");
        server.start();
    }
}

之后用SQL客户端(如DBeaver、SQuirreL SQL)通过jdbc:hsqldb:hsql://localhost/testdb连接,用户名用SA,密码留空,就能实时查看内存库中的表和数据。

2. 在测试代码中直接调用HSQL自带的GUI工具

无需改配置,在测试断点处执行以下代码,会弹出HSQL原生的数据库管理窗口,直接查看表结构和数据:

org.hsqldb.util.DatabaseManagerSwing.main(new String[] {
    "--url", "jdbc:hsqldb:mem:testdb", "--user", "SA", "--password", ""
});

如果是无GUI环境,用命令行版的DatabaseManager替代:

org.hsqldb.util.DatabaseManager.main(new String[] {
    "--url", "jdbc:hsqldb:mem:testdb", "--user", "SA", "--password", ""
});

3. 在测试中直接查询并打印数据

在测试的关键节点(比如数据写入后、断言前)执行查询语句,把数据打印到控制台:

// 假设用JdbcTemplate操作数据库
jdbcTemplate.query("SELECT * FROM your_target_table", (rs, rowIndex) -> {
    System.out.printf("ID: %d, Column1: %s, Column2: %s%n", 
        rs.getInt("id"), rs.getString("column1"), rs.getTimestamp("column2"));
    return null;
});

这种方式能快速验证数据是否正确写入。

4. 启用SQL操作日志排查问题

在测试配置中添加HSQL的日志参数,把所有执行的SQL语句和操作记录输出到控制台:

# 记录应用级操作
hsqldb.applog=1
# 记录所有SQL语句
hsqldb.sqllog=2

通过日志可以确认SQL是否执行、参数是否正确,排查数据未出现的原因。

5. 临时持久化内存数据到文件

把JDBC URL改成带文件路径的内存模式,数据会同时存在内存和本地临时文件中,测试过程中可以用客户端连接文件库查看:

jdbc:hsqldb:file:/tmp/hsqltestdb;hsqldb.close_on_exit=false

测试完成后手动删除临时文件即可,避免残留数据影响后续测试。

内容的提问来源于stack exchange,提问作者Himanshu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:52:49