[Qt-interest] QtSql connection timeout error

Raul Metsma raul at innovaatik.ee
Fri Sep 18 09:02:23 CEST 2009


For Mysql reconnect we are using following code

QVariant v = db.driver()->handle();
if( qstrcmp( v.typeName(), "MYSQL*" ) == 0 )
{
     MYSQL *handle = *static_cast<MYSQL **>( v.data() );
     if( handle != 0 )
     {
	my_bool reconnect = 1;
	mysql_options( handle, MYSQL_OPT_RECONNECT, &reconnect );
     }
}

It works just fine

Raul Metsma

Mikhail Veygman wrote:
> Not having QT code or documentation makes this a little harder but ...
> 
> When mysql server drops a connection from the client the client does  
> not detect this until the connection is used again. Which is precisely  
> the reason that you are getting an error. However mysql C API provides  
> a mysql_ping function which if the connection is dropped by the server  
> it will reestablish the connection to the server without having to  
> recreate the mysql connection handle. So 2 things you can check:
> 
> 1. Check if QMySQL driver calls this function prior to sending a query
> 
> 2. If there is a DB ping method that can be called to achieve the same  
> result
> 
> Regards,
> 
> Mikhail Veygman
> 
> Sep 17, 2009, в 3:00 PM, Thomas Fjellstrom <tfjellstrom at shaw.ca>  
> написал(а):
> 
>> On Thu September 17 2009, Stephen Jackson wrote:
>>> On Thu, Sep 17, 2009 at 7:30 PM, Thomas Fjellstrom wrote:
>>>> I've created a little long running process (a server), which  
>>>> connects to
>>>> MySQL through the QtSql api, but occasionally the mysql connection  
>>>> times
>>>> out due to inactivity (i assume). I've tried checking
>>>> connection.isOpen(),
>>>> connection.isValid(), and the connection.lastError(), but none of  
>>>> them
>>>> seem to hint that there's even been a problem. isOpen returns true,
>>>> isValid returns true, and lastError().code() is QSqlError::NoError  
>>>> but
>>>> every single query.exec() fails.
>>>>
>>>> I'm stumped. How can I reliably detect when the connection drops  
>>>> like
>>>> this?
>>> Perhaps these two recent threads might be relevant to this problem.
>>>
>>> http://lists.trolltech.com/pipermail/qt-interest/2009-August/011477.html
>>>
>>> http://lists.trolltech.com/pipermail/qt-interest/2009-September/012347.html
>>>
>> Partially valid. But lastError() should actually say there's an  
>> error if
>> exec() fails, no?
>>
>> -- 
>> Thomas Fjellstrom
>> tfjellstrom at shaw.ca
>> _______________________________________________
>> Qt-interest mailing list
>> Qt-interest at trolltech.com
>> http://lists.trolltech.com/mailman/listinfo/qt-interest
> 
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest



More information about the Qt-interest-old mailing list