检查odbc连接是否打开或关闭。

6

我希望编写一个函数来执行以下操作:“如果数据库连接已经打开,关闭它并重新打开一个新的连接”

为了做到这一点,我需要一种检查连接是否已经打开的方法。

这是我的连接字符串:

library(odbc)

my_conn_string <- paste("Driver{Teradata};DBCName=teradata2690;DATABASE=PRODUCTION;UID=",
                            username,";PWD=",password, sep="")

t2690 <- dbConnect(odbc::odbc(), .connection_string=my_conn_string)

我考虑使用连接的 class :

    if (is.null(class(t2690)) { 
t2690 <- dbConnect(odbc::odbc(), .connection_string=my_conn_string) 
}

然而,这并不起作用,因为无论连接是否打开,类都是相同的:
# Class when connected
class(t2690)

[1] "Teradata"
attr(,"package")
[1] ".GlobalEnv"

# Class when not connected
dbDisconnect(t2690)
class(t2690)

[1] "Teradata"
attr(,"package")
[1] ".GlobalEnv"

你看过这个问题吗?https://stackoverflow.com/questions/25530363/show-all-open-rodbc-connections - dpel
我发现很难将那个答案适应于使用odbc包而不是RODBC - Shinobi_Atobe
1个回答

8

有一个名为DBI::dbIsValid的函数,由odbc导入。它提供了一个通用测试,返回一个逻辑值。

con <- dbConnect(RSQLite::SQLite(), ":memory:")    
dbIsValid(con)
# TRUE

dbDisconnect(con)
dbIsValid(con)    
# FALSE

重新连接已断开或清除的连接,您可以根据此值有条件地进行连接,例如:
if (!dbIsValid(con)) {

  con <- dbConnect(RSQLite::SQLite(), ":memory:")

}

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