【发布时间】:2017-08-30 05:38:58
【问题描述】:
如果我在函数中创建数据库连接,则连接对象会在函数完成执行时被销毁。这是否可靠地关闭了数据库连接,还是最好先手动关闭它?
为什么我需要知道这一点:
我正在开发一个使用 RODBC 或 RJDBC 作为后端动态创建数据库连接的包。我设计了我的函数接口,以便您可以传入用户名和密码或连接对象。通常,当我传入一个连接对象时,我不希望在函数终止时关闭连接,而当我传入用户名和密码时,我希望它被关闭。
如果我不必担心打开的连接,它会为我简化很多事情,也可以让我省去很多麻烦。
回答及更多:
我将本杰明的答案标记为答案,因为它提供了很好的建议,尽管实际上我正在寻找的是更多 Marek 的评论(意译:)连接可以在连接对象被破坏后打开并且没有办法不再从 R 访问它们。
我最终找到了一个解决方案,该解决方案涉及创建一个 R6 类并定义关闭连接的 finalize() 方法(它比 on.exit() 更强大),但这超出了本问题的范围。
【问题讨论】:
-
我只是在与
RJDBC斗争,即使对象被移除,它也不会关闭连接。您可以通过dbDisconnect(name)关闭连接,但是当您丢失句柄时无法(AFAIK)关闭它(dbListConnection不起作用)。 -
旁注:我从
RODBC切换到odbc(cran.r-project.org/package=odbc)我建议看看它。 -
可惜了。可悲的是,我不得不使用 RJDBC :(。这实际上已经或多或少地回答了我的问题。