Ответ 1
Мы можем использовать метод dbClearResult.
Пример:
dbClearResult(dbListResults(conn)[[1]])
Я использовал RMySQL для импорта базы данных, иногда, когда я пытаюсь закрыть соединение, я получаю следующую ошибку:
Error in mysqlCloseConnection(conn, ...) :
connection has pending rows (close open results set first)
У меня нет других способов исправить это, кроме перезагрузки компьютера, все, что я могу сделать, это разрешить это? Спасибо!
Мы можем использовать метод dbClearResult.
Пример:
dbClearResult(dbListResults(conn)[[1]])
Как отметил мультиплексор, вы, вероятно, ошибаетесь, оставив части результирующего набора.
DBI и пакеты доступа, такие как RMySQL, имеют документацию, которая иногда немного сложна. Я пытаюсь напомнить себе использовать dbGetQuery()
, который захватывает весь результат сразу. Ниже приведен короткий фрагмент кода CRANberries:
sql <- paste("select count(*) from packages ",
"where package='", curPkg, "' ",
"and version='", curVer, "';", sep="")
nb <- dbGetQuery(dbcon, sql)
После этого я могу закрыть без забот (или делать другие операции).
Вам нужно закрыть набор результатов перед закрытием соединения. Если вы попытаетесь закрыть соединение перед закрытием набора результатов, который имеет отложенные строки, то иногда это приводит к зависанию машины.
Я не знаю много о rmysql, но сначала попытаюсь закрыть результаты.
rs<- dbGetQuery(dbcon, sql)
data<-dbFetch(rs)
dbClearResult(rs)
Последняя строка удалила следующую ошибку при продолжении запроса
Error in .local(conn, statement, ...) :
connection with pending rows, close resultSet before continuing
Вы должны помнить о наборе результатов самостоятельно. В приведенном ниже примере у вас есть, как закрыть/очистить результаты и как повлиять на затронутые строки. Чтобы решить вашу проблему, используйте последнюю строку кода для переменной, которая принимает результаты от любого вашего отправленного оператора или запроса.:)
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)