问题描述
我正在尝试使用 RJDBC
使用 for 循环自动从数据库下载数据。我使用的数据库每 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}
感谢您的帮助
解决方法
您可以使用 pool
包 to 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... ")