Pregunta

Aquí mi fragmento de código:

query.next();
qDebug()<<query.lastError();
qlonglong res=query.value(0).toLongLong();
qDebug()<<query.lastError();

y el registro correspondiente que tengo:

Debug: QSqlError(2006, "QMYSQL: Unable to execute query", "MySQL server has gone away") 
Warning: QSqlQuery::value: not positioned on a valid record
Debug: QSqlError(2006, "QMYSQL: Unable to execute query", "MySQL server has gone away")

Normalmente, mi programa funciona bien (funciona en un servidor y acepta conexiones de los clientes), pero cada mañana, cuando intenté conectarlo, recibo mensajes anteriores.

¿Cuál puede ser el problema con el servidor MySQL?

¿Fue útil?

Solución

Desde el Manual MySQL:

La razón más común para el servidor MySQL ha desaparecido es que el servidor cronometró y cerró la conexión.

...

Por defecto, el servidor cierra la conexión después de ocho horas si no ha sucedido nada. Puede cambiar el límite de tiempo estableciendo el wait_timeout variable cuando comienzas mysqld.

...

Si tiene un script, solo debe emitir la consulta nuevamente para que el cliente haga una reconexión automática. Esto supone que tiene una reconexión automática en el cliente habilitado (que es el valor predeterminado para el mysql Cliente de línea de comandos).

Ver esta página manual Para más detalles sobre este error.

Otros consejos

Sé que esto es antiguo, pero resulta ser el primer éxito de Google para "MySQL Server se ha ido QMYSQL: No se puede ejecutar la consulta".

Parece que qsqldatabase :: isopen () todavía devolverá verdadero a pesar de que ya no tenemos una conexión. Así es como lo capto:

QSqlDatabase db = QSqlDatabase::database();
QSqlQuery query(db);
QString q = "SELECT * FROM myTable;";
if (!query.exec(q))
{
    int err = query.lastError().number();
    if (err == 2006) // Might want to do #2013 here also?
    {
        db.close();
        if (db.open() && !query.exec(q))
        {
            // handle error here we still failed...
        }
    }
    else
    {
        // handle normal query errors here
    }
}

Pude imitar esta situación reiniciando el servidor con "/etc/init.d/mysql reiniciar" y seguir enviando consultas y eventualmente arroja este error. Siento que esto no debería cambiarse del lado del servidor, de hecho, 8 horas parecen extremadamente largas para mantener abierta una conexión inactiva.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top