RMySQL: закрытие соединения без дескриптора

Я экспериментирую с RMySQL и случайно создал соединение без дескриптора.

dbConnect(MySQL(), user = "foo", password = "bar")
connLocalDB = dbConnect(MySQL(), user = "foo", password = "bar")

Обратите внимание, что возврат первого вызова ничему не присваивается. Теперь, когда я делаю dbListConnections(MySQL()), я вижу две связи:

> dbListConnections(MySQL())
[[1]]
<MySQLConnection:0,0>

[[2]]
<MySQLConnection:0,1>

Затем я попробовал это:

> dbDisconnect(dbListConnections(MySQL())[[1]])
[1] TRUE

но тогда я получил это:

> dbListConnections(MySQL())
[[1]]
Error in .local(dbObj, ...) : 
  internal error in RS_DBI_getConnection: corrupt connection handle

Как безопасно завершить соединение, которому не назначен дескриптор?


person tchakravarty    schedule 06.04.2015    source источник
comment
Вам не нужно будет беспокоиться об этом в следующей версии (т.е. версии на github)   -  person hadley    schedule 07.04.2015
comment
@hadley Самая странная вещь. Только что обновился, и теперь он дает мне > dbListConnections(MySQL()) # list the open connections Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘dbListConnections’ for signature ‘"MySQLDriver"’   -  person tchakravarty    schedule 07.04.2015
comment
@hadley Появляются всевозможные другие ошибки, в том числе невозможность входа в систему без пароля с использованием файла конфигурации в домашнем каталоге.   -  person tchakravarty    schedule 07.04.2015
comment
@hadley Следите за тем, чтобы узнать, можете ли вы помочь диагностировать эти ошибки с помощью версии пакета для разработчиков.   -  person tchakravarty    schedule 08.04.2015
comment
Файлы с ошибками на github, пожалуйста. dbListConnections() больше не используется, потому что он не нужен.   -  person hadley    schedule 09.04.2015
comment
@hadley Спасибо. Версия для разработчиков вносит слишком много критических изменений, и я думаю, что пока вернусь к версии из CRAN. Я предполагаю, что в этой версии нет способа справиться с этим (каламбур не предназначен)?   -  person tchakravarty    schedule 09.04.2015
comment
Ну, было бы полезно здесь узнать, что это за критические изменения...   -  person hadley    schedule 09.04.2015
comment
@hadley Я с радостью приму участие на странице проблем RMySQL и DBI. Имейте в виду, я рассматриваю изменения API без предварительных предупреждений об устаревании, нарушающих изменения.   -  person tchakravarty    schedule 09.04.2015


Ответы (1)


Обычно для создания соединения, получения данных запроса и последующего закрытия соединения я использую следующую функцию:

getDataSql <- function( query ) {
  con = dbConnect(RMySQL::MySQL(), dbname  =  "dbname", host = "host", user = "username", password = "pasword", port = "port")
  result <- dbGetQuery(con, query)
  dbDisconnect(con)
  result
}
person mrina713    schedule 05.04.2017