2010-11-03 52 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) 
相關問題