JRuby和HSQLDB:随机丢失行

时间:2011-08-22 07:00:42

标签: sql ruby jruby hsqldb

我有以下代码:

# my db connection is here:
# @connection = DriverManager.getConnection("jdbc:hsqldb:file:../db/rdata", "user", "user")

#the method recieves a array of hash {:rev,:time,:path,:result}
def create(list)
    st=@connection.createStatement()
    sql=""
    list.each do |i|
        sql.concat("INSERT INTO RESULTS_LOGIN (REVISION, TIMESTAMP, ARCHIVEPATH, RESULTS) VALUES (#{i[:rev]},'#{i[:time]}','#{i[:path]}','#{i[:result]}');\n")
    end
    p sql.lines.to_a.size
    st.execute(sql)
    st.close
end  

问题:

sql.lines.to_a.size是128,这意味着我要插入128行。但是,经过多次重新运行后,我发现每次在db中都有不同的行。例如,这次RESULT_LOGIN表有114行,下次是99行。还有成功运行,表中有128行。

我无法理解为什么会发生这样的事情。没有错误,没有异常,而且奇怪的是,在我的代码中,在“create”方法之后有一个方法,whcih执行“select * from RESULTS_LOGIN”并打印它,如下所示:

create(list) # insert rows
read_all # print all rows  

每次“create”之后的“read_all”打印出128行和正确的数据;但是,如果我在关闭并重新创建连接后单独运行read_all,或者使用HSQLDB的GUI管理工具浏览数据库,则会丢失一些行....

1 个答案:

答案 0 :(得分:1)

对于此类测试,您需要向URL或作为执行的SQL语句添加额外设置。这是为了确保在测试结束时保留所有未写入的数据。看看我对这个问题的回答:

something funny with embedded hsql