如何在RMySQL中关闭结果集?

时间:2010-11-03 03:35:53

标签: mysql r

我使用RMySQL作为导入数据库,有时当我尝试关闭连接时,收到以下错误:

Error in mysqlCloseConnection(conn, ...) : 
  connection has pending rows (close open results set first)

除了重新启动计算机之外我没有别的方法可以解决这个问题,我能做什么来解决这个问题?谢谢!

5 个答案:

答案 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)