2010-11-03 49 views
30

我用RMySQL导入数据库,有时当我尝试关闭连接,我收到以下错误:如何关闭RMySQL中的结果集?

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

我有比重新启动计算机纠正这个其他的没有其他办法,我能做什么使解决这个?谢谢!

回答

33

我们可以使用dbClearResult方法。
例子:

dbClearResult(dbListResults(conn)[[1]]) 
+2

由于在Dirks文章中解释的原因而下降了:如果你有挂起的行,你可能做了一个'dbSendQuery(”SELECT ... “)'没有获取所有的结果,这可能不是你想要的。除非你有特定的理由不要,否则总是在SELECT语句中使用'dbGetQuery'。 – Backlin 2017-01-04 15:20:14

1

您需要在关闭连接之前关闭结果集。 如果在关闭具有挂起行的结果集之前尝试关闭连接,有时会导致挂起计算机。

我对rmysql了解不多,但尝试先关闭结果集。

11

正如Multiplexer指出的那样,您可能会因为遗留部分结果集而导致错误。

DBI和像RMySQL这样的存取程序包都有文档,有时候有点难度。我尽量提醒自己使用dbGetQuery(),它一次抓取整个结果集。以下是来自CRANberries代码的一小段代码:

sql <- paste("select count(*) from packages ", 
      "where package='", curPkg, "' ", 
      "and version='", curVer, "';", sep="") 
nb <- dbGetQuery(dbcon, sql) 

之后我可以关闭而不用担心(或执行其他操作)。

+1

我显然一直在做这个不是靠设计,而是靠运气。它是什么命令不会返回所有结果,而是使结果集保持打开状态? – 2010-11-03 16:08:08

+0

*例如''dbSendQuery()'后跟'fetch()'具有固定数量的行。 – 2010-11-03 16:22:23

+1

我每天都会做德克的工作,而且工作得很好。 – Maiasaura 2010-11-04 15:19:28

1
rs<- dbGetQuery(dbcon, sql) 
data<-dbFetch(rs) 
dbClearResult(rs) 

最后一行继续查询

Error in .local(conn, statement, ...) : 
    connection with pending rows, close resultSet before continuing 
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) 
相关问题