[Qt-interest] QtSql connection timeout error

Thomas Fjellstrom tfjellstrom at shaw.ca
Fri Sep 18 11:28:37 CEST 2009


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.htm
> >>>l
> >>>
> >>> 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?
> >
> > _______________________________________________
> > 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