2010-11-03 5 views
30

que utilizan RMySQL para la base de datos de importación, a veces cuando trato de cerrar la conexión, aparece el siguiente error:cómo cerrar los resultados en RMySQL?

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

no tengo otras formas de corregir esto con excepción de reiniciar el equipo, algo que pueda hacerlo ¿resuelve esto? ¡Gracias!

Respuesta

33

Podemos usar el método dbClearResult.
Ejemplo:

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

Downvoted debido a las razones explicadas en la publicación de Dirks: Si tiene filas pendientes, probablemente haya hecho un 'dbSendQuery (" SELECT ... ")' sin obtener todos los resultados, que probablemente no es lo que quieres. Siempre use 'dbGetQuery' con las sentencias SELECT a menos que tenga razones específicas para no hacerlo. – Backlin

1

Debe cerrar el conjunto de resultados antes de cerrar la conexión. Si intenta cerrar la conexión antes de cerrar el conjunto de resultados que tiene filas pendientes, a veces puede hacer que cuelgue la máquina.

No sé mucho sobre rmysql pero primero trato de cerrar el conjunto de resultados.

11

Como se observó en Multiplexor, probablemente lo esté haciendo incorrectamente dejando atrás partes del conjunto de resultados.

DBI y los paquetes de acceso como RMySQL tienen documentación que es un poco desafiante a veces. Intento recordarme utilizar dbGetQuery() que capta todo el conjunto de resultados a la vez. He aquí una breve fragmento del código de arándanos:

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

Después de esto puedo cerrar sin preocupaciones (o hacer otras operaciones).

+1

Aparentemente, he estado haciendo esto correctamente no por diseño sino por suerte. ¿Qué comando es el que no devuelve todos los resultados pero deja abierto el conjunto de resultados? –

+0

* E.g. * 'dbSendQuery()' seguido de 'fetch()' con un número fijo de filas. –

+1

Hago lo que Dirk hace a diario, y funciona muy bien. – Maiasaura

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

última línea elimina el siguiente error al continuar la consulta

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

Hay que recordar sobre el resultado del mismo establece. En el siguiente ejemplo, tiene cómo cerrar/borrar resultados y cómo tomar las filas afectadas. Para resolver su problema use la última línea de código en la variable que toma los resultados de cualquiera de sus declaraciones o consultas enviadas. :)

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) 
Cuestiones relacionadas