ibatis和HSQL采用in-process模式

最近做一个简单的桌面应用,打算用小型的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在关闭服务前会将所有内存中的数据同步到文件里。

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

 

但至于为什么第二种方法无法奏效,还等我看过IBATIS的源代码后才能解读。

 

希望有高人解答下!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值