ibatis和HSQL采用in-process模式

来源:互联网 发布:monkey社交软件下载 编辑:程序博客网 时间:2024/06/07 01:10

最近做一个简单的桌面应用,打算用小型的HSQL做数据存储,但是想学习一下IBATIS就用了这个框架,但是折腾了我一个下午呢。

 

来看看问题吧:

HSQL在in-process模式下,是随应用的JVM启动的,而且必须在同一个JVM中。平时的JDBC只用使用以下代码就能连接HSQL。

 

 

的确很简单,但是我们会发现一个问题,在数据库插入后直接关闭连接,所插入的数据并没有生成相应的脚本放入.script中,而是丢失了。

查阅了一些资料,只要在url后加上 shutdown=true  就能写入。代码如下:

 

 

为什么呢?

shutdown 这个属性是让HSQL知道当HSQL的所有连接都关闭的时候,HSQL就将内存中的东东写成脚本,持久化到硬盘上。

 

现在我们加上IBATIS,SqlMapConfig.xml配置如下:

 

 

但是一运行程序,结果呢?

还是不行,HSQL并没有把内存中的东西写进脚本。

 

又得查半天资料,我发现HSQL可以直接写 XXX.script文件

而且其中的有个属性很重要,WRITE_DELAY

这是干什么的呢?

看字面的意思我们就知道是写的时候延迟。

所以我就把它改成

SET WRITE_DELAY FALSE

 

这样又是什么意思呢

就是说不延迟

这样再运行看看,果然可以了。

 

那这又是为什么呢?

 

我就来说说完粗浅的见解:

HSQL 是把所有DB的操作记录在内存里,然后通过这个属性配置的时间,周期的将数据同步到文件里,然而在同步以前当机了,那么所有数据都丢失了。

当然,还有一种情况,就是HSQL的服务没有shutdown就关闭了,也就是和上述类似的情况。

HSQL的shutdown在关闭服务前会将所有内存中的数据同步到文件里。

所以第一种方法才能奏效。

原创粉丝点击