【问题标题】:How to display and close all active RJDBC connections如何显示和关闭所有活动的 RJDBC 连接
【发布时间】:2015-11-02 23:07:17
【问题描述】:

我们采用 RJDBC 是因为它的速度(通过 RODBC),但在确保在 R 会话结束时关闭所有打开的数据库连接方面遇到了问题。问题是批处理运行后,我们通常会有 100 多个睡眠数据库连接。我们的服务器正在运行 Microsoft SQL Server 2012。

连接字符串的格式为:

drv <<- JDBC("com.microsoft.sqlserver.jdbc.SQLServerDriver", "C:/Program Files/Microsoft JDBC Driver 4.2 for SQL Server/sqljdbc_4.2/enu/sqljdbc42.jar")
dbConnection <<- dbConnect(drv, "jdbc:sqlserver://s26",integratedSecurity=TRUE,databaseName="XXXXXX")

如何确保关闭所有活动的数据库连接?我发现了一个功能,如果我使用RMySQL,它似乎会起作用,但我不是。 RJDBC 文档也没有描述任何列出连接的方法,以便可以关闭它们。此外,常见的 DBI 函数 dbListConnections() 似乎不适用于 RJDBC。

感谢您的帮助!

【问题讨论】:

  • 我没有使用 RJDBC(不知道为什么你认为它更快)我所做的是我在 RODBC 中使用 sql server 2012 on.exit(odbcClose(''))它几乎可以确保没有打开的连接
  • 嗯,感谢您的意见@Bg1850。我正在考虑转向 RODBC,因为 RJDBC 的 dbWriteTable 功能和缺乏连接跟踪被证明非常麻烦。我听说 RODBC 很慢,RJDBC 很快,反之亦然,但在这一点上,功能比速度更重要。一些较新的软件包,如 rsqlserver 甚至更快,但更不健壮。再次感谢。如果我确实转向 RODBC,我将使用您的贡献。谢谢!

标签: sql-server r jdbc mssql-jdbc rjdbc


【解决方案1】:

我知道这个问题是不久前被问到的,但我正在回答它以防其他人正在寻找解决方案。

您可以检查全局变量是否为 JDBC 连接并关闭它。
这是我所做的示例代码:

    var <- as.list(.GlobalEnv)
    var_names <- names(var)

    for (i in seq_along(var_names)){
        if (class(var[[var_names[i]]]) == "JDBCConnection"){
            dbDisconnect(var[[var_names[i]]])
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多