[Qt-interest] QtSql connection timeout error

Jason H scorp1us at yahoo.com
Fri Sep 18 01:30:35 CEST 2009


Well firewalls might drop the connection too. You should have some kind of last ping check and only ping if its past some interval which would be less than the router timeout (usually 75s, or mysql's).

I've seem implementations that just issue a dummy sql select (select now() ) request to keep the routers happy. 



----- Original Message ----
From: Mikhail Veygman <mveygman at gmail.com>
To: "tfjellstrom at shaw.ca" <tfjellstrom at shaw.ca>
Cc: "qt-interest at trolltech.com" <qt-interest at trolltech.com>
Sent: Thursday, September 17, 2009 6:26:41 PM
Subject: Re: [Qt-interest] QtSql connection timeout error

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