Подтвердить что ты не робот

Как закрыть результаты в RMySQL?

Я использовал RMySQL для импорта базы данных, иногда, когда я пытаюсь закрыть соединение, я получаю следующую ошибку:

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

У меня нет других способов исправить это, кроме перезагрузки компьютера, все, что я могу сделать, это разрешить это? Спасибо!

4b9b3361

Ответ 1

Мы можем использовать метод dbClearResult.
Пример:

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

Ответ 2

Как отметил мультиплексор, вы, вероятно, ошибаетесь, оставив части результирующего набора.

DBI и пакеты доступа, такие как RMySQL, имеют документацию, которая иногда немного сложна. Я пытаюсь напомнить себе использовать dbGetQuery(), который захватывает весь результат сразу. Ниже приведен короткий фрагмент кода CRANberries:

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

После этого я могу закрыть без забот (или делать другие операции).

Ответ 3

Вам нужно закрыть набор результатов перед закрытием соединения. Если вы попытаетесь закрыть соединение перед закрытием набора результатов, который имеет отложенные строки, то иногда это приводит к зависанию машины.

Я не знаю много о rmysql, но сначала попытаюсь закрыть результаты.

Ответ 4

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

Последняя строка удалила следующую ошибку при продолжении запроса

Error in .local(conn, statement, ...) : 
  connection with pending rows, close resultSet before continuing

Ответ 5

Вы должны помнить о наборе результатов самостоятельно. В приведенном ниже примере у вас есть, как закрыть/очистить результаты и как повлиять на затронутые строки. Чтобы решить вашу проблему, используйте последнюю строку кода для переменной, которая принимает результаты от любого вашего отправленного оператора или запроса.:)

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)