2010-10-14 26 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開發標題。