[Qt-interest] QtSql connection timeout error

Thomas Fjellstrom tfjellstrom at shaw.ca
Fri Sep 18 12:02:02 CEST 2009


On Fri September 18 2009, Peter wrote:
> I had the same problem and solved it with a simple timer, all 2 minutes
> I fire the timer for each open connection to have a simple select
> count(*) from existing_table and I have no drops (except network errors
> or server break downs).. In my former api (before using SQL Plugins) I
> had a automatic mysql_ping established...
> Regards,
> Peter
>

Right now my server code just attempts to prepare a statement, if that fails, 
and the error/state makes no sense, I call db.open(), and re try the prepare. 
I also do the same check for exec.

> Thomas Fjellstrom schrieb:
> > On Fri September 18 2009, Raul Metsma wrote:
> >> 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
> >
> > That's not bad. But If I ever want to change databases, that code becomes
> > dead weight. I might use something similar, maybe the ping method, or
> > some command that lets me check to see if the socket is closed or half
> > closed.
> >
> > Thanks :)
> >
> >> 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.h
> >>>>>tm l
> >>>>>
> >>>>> http://lists.trolltech.com/pipermail/qt-interest/2009-September/01234
> >>>>>7. html
> >>>>
> >>>> Partially valid. But lastError() should actually say there's an
> >>>> error if
> >>>> exec() fails, no?
> >>>
> >>> _______________________________________________
> >>> 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
> 
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
> 


-- 
Thomas Fjellstrom
tfjellstrom at shaw.ca




More information about the Qt-interest-old mailing list