2015-04-06 14 views
6

Sto sperimentando con RMySQL e ho accidentalmente creato una connessione senza handle.RMySQL: chiusura di una connessione senza handle

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

Si noti che il ritorno della prima chiamata non è assegnato a nulla. Ora, quando faccio una dbListConnections(MySQL()) vedo due connessioni:

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

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

Allora ho provato questo:

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

ma, poi, ho ottenuto questo:

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

come terminare in modo sicuro una connessione a cui non è assegnato un handle?

+0

Non sarà necessario preoccuparsi di questo nella prossima versione (cioè la versione su github) – hadley

+0

@hadley La cosa più strana. Appena aggiornato, e ora mi dà '> dbListConnections (MySQL()) # elenca le connessioni aperte Errore in (funzione (classi, fdef, mtable): impossibile trovare un metodo ereditato per la funzione 'dbListConnections' per firma ' "MySQLDriver" ' – tchakravarty

+0

'hadley Tutti i tipi di altri errori spuntano, incluso l'impossibilità di eseguire il login senza password usando un file di configurazione nella directory home – tchakravarty

risposta

0

generale per la creazione di una connessione, ottenere i dati di una query e quindi chiudere la connessione che uso la seguente funzione:

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