如何在Lua中关闭所有打开的光标?

在关闭数据库连接之前,Lua 脚本关闭所有打开的光标的适当模式是什么?我有一个帮助函数 rows(),在多个地方调用它会创建光标,在函数 end() 中,我想能够关闭所有已创建的光标。

function rows(sql_statement)
   local cursor = assert(con:execute(sql_statement))
   local closed = false
   return function()
     if closed then 
       return nil 
     end
     local row = {}
     result = cursor:fetch(row)
     if result == nil then
       cursor:close()
       closed = true
       return nil
     end
     return row
   end
end

function end()
   -- 这个 con:close() 调用因为有打开的光标而失败
   con:close()
   env:close()
end

原文链接 https://stackoverflow.com/questions/3308366

点赞
stackoverflow用户173806
stackoverflow用户173806

rows() 返回的迭代器函数直到结果集完成才关闭游标。可能某些迭代器实例没有完全读取它们的结果。在关闭连接之前,您可以尝试调用collectgarbage('collect') 清除任何未引用的迭代器函数。rows()函数还可以将所有游标放入一个带有弱引用的表中,end()函数可以枚举这些表来关闭所有打开的游标。

2010-07-22 16:13:46