如何在Ruby on Rails中正确关闭SQL连接?

3

我有一个相当复杂的SQL查询,无法在ActiveRecord中完成或者很难实现。

我创建了我的SQL查询,并进行了以下操作:

sql = getcomplexsqlquery
result = ActiveRecord::Base.connection.execute(sql)

并循环遍历结果。

如何确保SQL连接被关闭?

1个回答

7

不要试图关闭它。

你正在使用ActiveRecord连接到你的数据库,这与它进行正常查询时使用的连接是相同的。

关闭其中一个将会关闭另一个,导致ActiveRecord和Rails处于不良状态。


建议释放result。参考:http://www.fngtps.com/2008/free-result-after-using-activerecord-base-connection-execute/ - Prakash Murthy
那个评论是2008年的,已经很陈旧了。我希望现在一旦结果超出范围并被垃圾回收,就应该释放它。 - the Tin Man
那么即使 SQL 执行失败,连接也会被关闭?因此,不需要放置在 begin/rescue/ensure 块中? - Jack Marchetti
2
查询和连接之间有区别。连接应该保持,无论查询成功或失败。这是ActiveRecord用来与数据库通信的渠道。查询只是一个发送到数据库的问题(或语句),等待某种响应,并通过该连接发送。关闭连接是不好的。如果出现错误,查询将立即“结束”,但连接将被维护,您不应该尝试强制关闭它,否则您将不得不重新打开它以进行进一步的查询。 - the Tin Man
谢谢。我来自.NET/SQL世界,你必须确保关闭连接以避免耗尽连接池。 - Jack Marchetti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接