Проверьте, открыто ли соединение odbc или закрыто - PullRequest
0 голосов
/ 04 июня 2018

Я хочу написать функцию, которая выполняет следующую операцию: «если соединение с базой данных уже открыто, закройте его и снова откройте новое»

Для этого мне нужен способ проверить, если соединениеуже открыто

Вот моя строка соединения:

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"

1 Ответ

0 голосов
/ 04 июня 2018

Есть функция DBI::dbIsValid, которая импортируется из odbc.Это обеспечивает общий тест, возвращающий логическое значение.

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

dbDisconnect(con)
dbIsValid(con)    
# FALSE

Чтобы повторно подключить отключенное или очищенное соединение, вы можете условно подключиться на основе этого значения, например:

if (!dbIsValid(con)) {

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

}
...