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 持久保存到内存中没有任何数据的文件?