我已经使用以下语句通过 RMySQL 包连接到 mysql 数据库:
con<-dbConnect(drv=RMySQL::MySQL(max.con=1,fetch.default.rec=500),host="host",dbname="dbname",password="psswd",user="user"))
到目前为止没有任何问题。当我检查时:
>class(con)
[1] "MySQLConnection"
attr(,"package")
[1] "RMySQL"
一小时后,我使用了以下语句:
dbGetQuery(conn=con,"show tables")
我得到了一个错误:
Error in .local(dbObj, ...) :
internal error in RS_DBI_getConnection: corrupt connection handle
但是,如果我检查此声明:
dbListConnections(drv=RMySQL::MySQL())
它给:
[[1]]
<MySQLConnection:0,21>
当我尝试:
dbDisconnect(conn=con)
我犯了同样的错误:
Error in .local(dbObj, ...) :
internal error in RS_DBI_getConnection: corrupt connection handle
然后我删除了连接对象:
rm(con)
当我尝试使用 dbConnect() 再次连接时,出现此错误:
con<-dbConnect(drv=RMySQL::MySQL(max.con=1,fetch.default.rec=500),host="host",dbname="dbname",password="psswd",user="user"))
Error in .local(drv, ...): Cannot allocate a new connection: 1 connections already opened
我知道当没有与数据库的连接时,dbListConnections() 调用会返回一个空列表。但在这种情况下不会返回一个空列表。
损坏的连接句柄是否与断开状态的连接状态不同?
或者
连接已超时?
检查与数据库的连接是否仍在工作的最佳方法是什么?