r - 无法分配新连接: 16 connections already opened RMySQL

标签 r shiny rmysql

我对 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/

相关文章:

r - 侧边栏菜单项之间的空间

mysql - 带条件调用多列的 SQL 查询(带 NAs)

mysql - 使用 RMySQL 的 SQL 插入保护

r - 如何使用 data.table 执行 "setdiff"合并?

r - 使用 ifelse 改变具有多个条件的新列时如何处理或忽略 NA(已解决)

r - zoo/xts - 不能对 1-cell 子集进行数学运算? R 挂起

javascript - 拖放时出现 R Shiny 输入 react 性错误

R 从日期中删除小时、分钟和秒

r - 编辑数据表,但当我们移动到另一个页面时,更改就会消失

database - 是否可以通过 R(RMySQL) 向数据库表添加索引