如何显示和关闭所有活动的 RJDBC 连接
How to display and close all active RJDBC connections
我们采用 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。
感谢您的帮助!
我知道不久前有人问过这个问题,但我会回答这个问题以防其他人正在寻找解决方案。
您可以检查全局变量是否是一个 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]]])
}
}
我们采用 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。
感谢您的帮助!
我知道不久前有人问过这个问题,但我会回答这个问题以防其他人正在寻找解决方案。
您可以检查全局变量是否是一个 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]]])
}
}