HSQLDB 和内存文件

Posted

技术标签:

【中文标题】HSQLDB 和内存文件【英文标题】:HSQLDB and in-memory files 【发布时间】:2010-06-08 23:32:40 【问题描述】:

是否可以通过某种方式设置 HSQLDB,以便将带有 db 信息的文件写入内存而不是使用实际文件?我想使用 hsqldb 将一些数据结构与休眠映射一起导出。但是,无法写入临时文件,因此我需要在内存中生成文件并返回包含其内容的流作为响应。

将 hsqldb 设置为使用 nio 似乎不是一个解决方案,因为在这些文件被写入文件系统之前无法获取它们。

我在想的是hsqldb的协议处理程序,但是我还没有找到合适的解决方案。

换句话说:黑客解决方案是向 hsqldb 传递一个或多个流。然后它将在其操作期间将数据写入这些流。写入所有数据后,db 的用户可以使用这些流通过网络将其发送回。

【问题讨论】:

【参考方案1】:

是的,当然,我们一直使用它进行集成测试。

用作网址:jdbc:hsqldb:mem:aname

见here for more details

DbUnit 提供了一个方便的数据库转储方法作为其软件包的一部分:

    // database connection
    Class driverClass = Class.forName("org.hsqldb.jdbcDriver");
    Connection jdbcConnection = DriverManager.getConnection(
            "jdbc:hsqldb:sample", "sa", "");
    IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);

    // full database export
    IDataSet fullDataSet = connection.createDataSet();
    FlatXmlDataSet.write(fullDataSet, new FileOutputStream("full.xml"));

请参阅DbUnit FAQ 了解更多详情。当然也有恢复数据的例程,因为这实际上是这个包的目的:为集成测试准备一个测试数据库。通常我们使用注释来执行此操作,但您必须为此使用 API。

【讨论】:

当然可以,但是如何在 hsqldb 执行结束后获取数据? 或者换句话说:是否有可能在 hsqldb 返回后获取内存中的表示并将其序列化为流? @lewap 我更新了我的答案。我很抱歉没有仔细阅读这个问题。使用 uberjar 之类的工具,我猜可以通过仅复制转储所需的类来最小化所有测试支持的开销。 你是最棒的!感谢您的解决方案!

以上是关于HSQLDB 和内存文件的主要内容,如果未能解决你的问题,请参考以下文章

是否可以仅将 HSQLDB 持久保存到内存中没有任何数据的文件?

在休眠配置文件中设置 HSQLDB 数据类型?

HSQLDB 停止定期检查点操作,日志文件不断增长

使用 HSQLDB sqltool 探索 MySQL 文件

HSQLDB 内存设置的 HSQLDB 约束违规和 SQL 查询日志

HSQLDB .script 文件