检查odbc连接是打开还是关闭
Check if odbc connection is open or closed
我想编写一个运行以下操作的函数:"if a database connection is already open, close it and reopen a new one"
为此,我需要一种方法来检查连接是否已打开
这是我的连接字符串:
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 都是一样的:
# 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"
有一个函数 DBI::dbIsValid
,由 odbc
导入。这提供了一个返回逻辑的通用测试。
con <- dbConnect(RSQLite::SQLite(), ":memory:")
dbIsValid(con)
# TRUE
dbDisconnect(con)
dbIsValid(con)
# FALSE
要重新连接断开或清除的连接,您可以根据此值有条件地连接,例如:
if (!dbIsValid(con)) {
con <- dbConnect(RSQLite::SQLite(), ":memory:")
}
我想编写一个运行以下操作的函数:"if a database connection is already open, close it and reopen a new one"
为此,我需要一种方法来检查连接是否已打开
这是我的连接字符串:
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 都是一样的:
# 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"
有一个函数 DBI::dbIsValid
,由 odbc
导入。这提供了一个返回逻辑的通用测试。
con <- dbConnect(RSQLite::SQLite(), ":memory:")
dbIsValid(con)
# TRUE
dbDisconnect(con)
dbIsValid(con)
# FALSE
要重新连接断开或清除的连接,您可以根据此值有条件地连接,例如:
if (!dbIsValid(con)) {
con <- dbConnect(RSQLite::SQLite(), ":memory:")
}