我对 Shiny 和 R 很陌生,但使用 Shiny 我试图连接到数据库从那里获取数据。当我尝试在浏览器上连续访问我的 RShiny 工作时,我收到类似 Cannot allocate a new connection: 16 Connections alreadyopen
的错误。我怎样才能克服这个错误或 RShiny 一次只期望 16 个用户?我在这里有另一个堆栈帖子RStudio Shiny Error mysqlNewConnection maximum of 16 connections但上面的网址解释不清楚。
最佳答案
也许您使用 obj <- dbConnect(...)
打开一个新的数据库连接每次您在代码中发送查询时。您只需调用dbDisconnect(obj)
即可在您创建的对象上,每次执行查询后都会终止相应的连接。
您还可以使用此函数立即终止所有打开的连接:
library(RMySQL)
killDbConnections <- function () {
all_cons <- dbListConnections(MySQL())
print(all_cons)
for(con in all_cons)
+ dbDisconnect(con)
print(paste(length(all_cons), " connections killed."))
}
我建议在 Shiny 的外部编写一个小函数来处理整个打开和关闭的事情:
library(RMySQL)
sqlQuery <- function (query) {
# creating DB connection object with RMysql package
DB <- dbConnect(MySQL(), user="youruser", password='yourpassword', dbname='yourdb', host='192.168.178.1')
# close db connection after function call exits
on.exit(dbDisconnect(DB))
# send Query to btain result set
rs <- dbSendQuery(DB, query)
# get elements from result sets and convert to dataframe
result <- fetch(rs, -1)
# return the dataframe
return(result)
}
希望有帮助!
关于r - 无法分配新连接: 16 connections already opened RMySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32139596/