【问题标题】:R - handle error when accessing a databaseR - 访问数据库时处理错误
【发布时间】:2021-08-23 07:01:36
【问题描述】:

我正在尝试使用 RJDBC 使用 for 循环自动从 db 下载数据。我使用的数据库每 10 分钟后会自动关闭连接,所以我想做的是以某种方式捕获错误,重新建立连接,然后继续循环。为了做到这一点,我需要以某种方式捕获错误,问题是,它不是 r 错误,因此trycatch 和类似的命令都不起作用。我只是在控制台上收到一条文本告诉我:

Error in .jcheck() : No running JVM detected. Maybe .jinit() would help.

我该如何处理:

if (output == ERROR) {remake connection and run dbQuery} else {run dbQuery}

感谢您的帮助

【问题讨论】:

    标签: r database error-handling rjdbc


    【解决方案1】:

    您可以使用poolto abstract away the logic of connection management
    这完全符合您对DBI 连接管理的期望。
    它应该可以与 RJDBC which is an implentation of DBI 一起使用,但我没有使用此驱动程序对其进行测试。

    libray(pool)
    library(RJDBC)
    
    conn <- dbPool(
      drv = RJDBC::JDBC(...),
      dbname = "mydb",
      host = "hostadress",
      username = "test",
      password = "test"
    )
    on.exit(poolClose(conn))
    
    dbGetQuery(conn, "select... ")
    
    

    【讨论】:

    • 问题是,连接自动关闭。我想要做的是检查它是否在我的循环正在进行时关闭
    • 如果连接关闭,pool 将在您再次查询数据库时重新打开它。查询运行时连接是否关闭?
    • 它通常在for循环运行时关闭,所以如果它关闭了我需要重新制作它
    • 为了进一步提供帮助,我需要更多关于循环工作方式的详细信息:您能提供一个代码示例吗? pool 将自动重新打开已关闭的连接。你试过了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    相关资源
    最近更新 更多