3

我正在进行 SQL 查询,tryCatch()用于防止 R 静默使用数据库连接的所有插槽。它看起来像这样:

sql <- "SELECT * FROM addresses WHERE zipcode=10202"
con <- dbConnect(PostgreSQL(), user='user', password='pswd',
                 dbname='contacts',host='dbserv')
tryCatch( {
    rs <- dbSendQuery(con, statement=sql)                              
    fp <- fetch(rs,n=-1) # Fetch all
    dbClearResult(rs)
    fp},
  finally=dbDisconnect(con))
fp

R 是否为此目的提供了更清洁的东西?我正在考虑如何readLines()使用字符串参数来确保没有文件连接处于打开状态。

4

1 回答 1

4

您可以尝试on.exit,如下所示:

    foo <- function() {

      con <- dbConnect(
        PostgreSQL(),
        user=config$db.user,
        password=config$db.password,
        dbname=config$db.name,
        host=config$db.host
      )

      on.exit({
        dbDisconnect(con)
      })

      ## ... do something w/ connection

    }

当函数foo即将返回(或由于异常退出)时,传递给的表达式on.exit将被计算。

于 2012-09-21T21:24:57.050 回答