JRuby 和 HSQLDB:随机丢失的行

Posted

技术标签:

【中文标题】JRuby 和 HSQLDB:随机丢失的行【英文标题】:JRuby and HSQLDB: randomly missing rows 【发布时间】:2011-08-22 07:00:41 【问题描述】:

我有以下代码:

# 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 行要插入。但是,重新运行多次后,我发现每次我在数据库中得到不同的行。比如这次RESULT_LOGIN表有114行,下一次是99....也有成功运行,使得表有128行。

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

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

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

【问题讨论】:

【参考方案1】:

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

something funny with embedded hsql

【讨论】:

在添加'shutdown=true'和'hsqldb.write_delay=false'后,测试成功了3次----以前从未发生过。我认为这就是问题所在。谢谢!

以上是关于JRuby 和 HSQLDB:随机丢失的行的主要内容,如果未能解决你的问题,请参考以下文章

使用 istringstream 丢失随机字符

剑道网格丢失选定的行

随机获取“网络连接丢失。”迅速使用“Alamofire.request”

SQL Server 2008 查找丢失的行 [重复]

php会话随机丢失,无法理解为啥

熊猫与“左”选项合并正在丢失左侧数据框中的行