嵌入式 HSQLDB 将数据持久化到文件中

Posted

技术标签:

【中文标题】嵌入式 HSQLDB 将数据持久化到文件中【英文标题】:Embedded HSQLDB persist data to a file 【发布时间】:2014-09-09 10:31:54 【问题描述】:

我正在创建一个使用嵌入式 hsqldb 的基于 Spring 的 Web 应用程序。 我的 spring 配置非常简单:

<jdbc:embedded-database id="dataSource" type="HSQL" >
    <jdbc:script location="classpath:scripts/create-table-if-not-exists" />
</jdbc:embedded-database>

但是使用此配置,所有数据都存储在内存中。这是创建的数据源 url

jdbc:hsqldb:mem:dataSource

我需要将数据保存到文件中。这样服务器重启后我可以再次使用它。

【问题讨论】:

如果需要持久化,那为什么要使用mem模式呢? @a_horse_with_no_name 我没有指定内存模式。我假设这是 spring 创建的默认配置。 jdbc:embedded-database 在 Spring 中表示 mem: 数据库。在 URL 中使用 file: 自己定义一个数据库。 roytuts.com/embedded-hsql-database-with-spring/ 【参考方案1】:

这个解决方案对我有用

<bean class="org.apache.commons.dbcp2.BasicDataSource" id="dataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url" value="jdbc:hsqldb:file:#systemProperties['user.home']/db/data" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>

<jdbc:initialize-database data-source="dataSource">
    <jdbc:script location="classpath:scripts/create-table-if-not-exists" />
</jdbc:initialize-database>

【讨论】:

换句话说,从嵌入式 HSQLDB 数据库中持久化数据的解决方案是不使用嵌入式数据库。 @Paul - 我正在使用一个 Spring MVC Web 应用程序来模拟基于 Map 的内存持久层。显然,数据库的性能要高得多,所以我想使用 HSQLDB。我希望嵌入数据库,即随应用程序启动和停止,但我希望数据是永久性的,即基于文件的。有没有办法做到这一点? @WebUser,我之前的评论有误。我应该说“从内存数据库中持久化数据的解决方案是不使用内存数据库。”接受的答案中提出的解决方案应该适合您 - 数据存储在文件中,并且数据库本身是嵌入的。 @Paul 这当然有帮助。谢谢!

以上是关于嵌入式 HSQLDB 将数据持久化到文件中的主要内容,如果未能解决你的问题,请参考以下文章

运行程序后文件数据库中没有模式通过休眠持久化到 hsqldb:file

Hsqldb-进程崩溃时数据如何持久化

hsqldb休眠持久化@Lob

如何创建持久化 HSQL 数据库?

无法使用 JPA 2.0、Spring 2.5.6、Hibernate 3.6.1 和 Maven 在 HSQLDB 中持久化

如何创建仅在 JVM 生命周期内存在的 HSQLDB 数据库?