代码之家  ›  专栏  ›  技术社区  ›  Shinobi_Atobe

检查ODBC连接是否打开或关闭

  •  0
  • Shinobi_Atobe  · 技术社区  · 8 年前

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

    为此,我需要一种方法来检查连接是否已打开

    这是我的连接字符串:

    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 回复  |  直到 8 年前
        1
  •  1
  •   Kevin Arseneau    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:")
    
    }