2010-10-14 102 views
5

当我关闭MySql服务器时,我怎么能理解mysql服务器离开了我的Qt程序?如何通知关闭Qt中的MySql服务器

编辑:

这里对我的审判:

当我关闭MySQL中,我获得这样的结果,我不能赶上MySQL是关闭的。

我的代码段是

QSqlQuery query(db); 
query.exec("SELECT * From RequestIds"); 
qDebug()<<query.lastError(); 
qDebug()<<db.lastError()<<QTime::currentTime(); 
qDebug()<<db.isOpen(); 
qDebug()<<db.isValid(); 

和输出是:

QSqlError(2006, "QMYSQL: Unable to execute query", "MySQL server has gone away") 
QSqlError(-1, "", "") QTime("14:22:58") 
true 
true 

我不明白为什么db.isOpen()返回true。

回答

1

你的程序不知道周围环境。如果有什么变化,你可能可以让操作系统通知你的程序,否则你将不得不测试自己。

如果数据库连接程序关闭之前,从连接状态应该返回某种错误代码。您从检查状态从连接功能?

编写一个简单的程序,打开一个窗口,在一个点击按钮,写入数据库。写入数据库后,程序应该在窗口中显示状态。运行你的程序。按下按钮以获得“受控”响应。关闭数据库,然后再次点击按钮。

您可以用调试器来做到这一点,取决于调试& OS的排队信息的能力。如果通过QSqlQuery::exec()您的查询失败

1

QSqlQuery::lastError()应该给你一个错误。此外QSqlDatabase::isOpen()应报告您的连接状态,QSqlDatabase::lastError()也可

+0

此问题在编辑问题之前给出。但作为编辑澄清,ISOPEN是越野车:看metdos回答http://stackoverflow.com/a/4406934/1619432 – handle 2014-11-05 07:48:44

1

您可以使用isOpenError确定打开初始数据库连接是否全成。我同意isOpen返回true是混淆。

要监视数据库连接我反复尝试以打开和关闭的轻量级MySQL连接(例如,每3秒):

#include <mysql/mysql.h> 

    mysql_init(&connection); 
    MYSQL *result = mysql_real_connect(&connection, 
      host.isNull() ? static_cast<const char *>(0) : host.toLocal8Bit().constData(), 
      user.isNull() ? static_cast<const char *>(0) : user.toLocal8Bit().constData(), 
      pass.isNull() ? static_cast<const char *>(0) : pass.toLocal8Bit().constData(), 
      dbName.isNull() ? static_cast<const char *>(0) : dbName.toLocal8Bit().constData(), 
      0, 
      0, 
      0); 

    bool currentlyConnected = (result != 0); 

在上述例子中,hostuserpass,和dbNameQString实例包含连接信息。请注意,您需要MySQL开发标题。