2011-08-22 29 views
1

我有以下代码: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) 
    [email protected]() 
    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行。

我不明白为什么会发生这样的事情。没有错误,没有例外,这有什么奇怪的是,在我的代码中有“创造”方法后,正确的方法,whcih执行“选择RESULTS_LOGIN *”,并打印出来,像这样:

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

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

回答

1

对于像这样的测试,您需要添加一个额外的设置为URL或作为已执行的SQL语句。这是为了确保所有未写入的数据在测试结束时保持不变。见我回答这个问题:

something funny with embedded hsql

+0

同时添加后“关机=真”和“hsqldb.write_delay =假”测试成功了三次----这之前NEVEN发生。我认为这是问题。谢谢! – coolcfan