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

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

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

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

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

【问题讨论】:

    标签: persistence export hsqldb


    【解决方案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 之类的工具,我猜可以通过仅复制转储所需的类来最小化所有测试支持的开销。
    • 你是最棒的!感谢您的解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2014-05-05
    相关资源
    最近更新 更多