我使用RMySQL作为导入数据库,有时当我尝试关闭连接时,收到以下错误:
Error in mysqlCloseConnection(conn, ...) :
connection has pending rows (close open results set first)
除了重新启动计算机之外我没有别的方法可以解决这个问题,我能做什么来解决这个问题?谢谢!
答案 0 :(得分:43)
我们可以使用dbClearResult方法 例如:
dbClearResult(dbListResults(conn)[[1]])
答案 1 :(得分:13)
正如多路复用器所指出的那样,你可能会把结果集的一部分留在后面。
DBI和像RMySQL这样的访问程序包有一些文档有时候会有点挑战。我试着提醒自己使用dbGetQuery()
一次抓取整个结果集。以下是CRANberries代码的简短片段:
sql <- paste("select count(*) from packages ",
"where package='", curPkg, "' ",
"and version='", curVer, "';", sep="")
nb <- dbGetQuery(dbcon, sql)
在此之后,我可以毫无后顾之忧地关闭(或做其他操作)。
答案 2 :(得分:1)
您需要在关闭连接之前关闭结果集。 如果在关闭具有挂起行的结果集之前尝试关闭连接,则有时会导致挂起计算机。
我对rmysql了解不多,但首先尝试关闭结果集。
答案 3 :(得分:0)
你必须自己记住结果的设定。在下面的示例中,您将了解如何关闭/清除结果以及如何处理受影响的行。要解决您的问题,请使用变量上的最后一行代码,该变量从您的任何发送语句或查询中获取结果。 :)
statementRes <- DBI::dbSendStatement(conn = db,
"CREATE TABLE IF NOT EXISTS great_dupa_test (
taxonomy_id INTERGER NOT NULL,
scientific_name TEXT);")
DBI::dbGetRowsAffected(statementRes)
DBI::dbClearResult(statementRes)
答案 4 :(得分:0)
如先前的答案中所述,您将收到此错误,因为RMysql不会返回查询的所有结果。
当结果超过500时,我遇到了这个问题:
my_result <- fetch( dbSendQuery(con, query))
查看要获取的文档后,我发现您可以指定检索到的记录数:
n =每次提取要检索的最大记录数。使用n = -1或n = Inf检索所有未决记录。
解决方案:
1-将记录数设置为无穷大:
my_result <- fetch( dbSendQuery(con, query), n=Inf)
2-使用dbGetQuery:
my_result <- dbGetQuery(con, query)