2010-10-14 11 views
5

में जब मैं सर्वर बंद कर दिया, मैं कैसे समझ सकते हैं कि mysql सर्वर मेरी क्यूटी कार्यक्रम से दूर चला गया है?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() सच देता है।

उत्तर

1

आपका कार्यक्रम उसके आसपास का पता नहीं है। अगर कुछ बदल जाता है, तो आप ओएस अपने कार्यक्रम को सूचित करने में सक्षम हो सकता है, या आप अपने आप को परीक्षण करने के लिए होगा।

डेटाबेस कनेक्शन अपने कार्यक्रम से पहले बंद कर देता है, तो कनेक्शन से स्थिति त्रुटि कोड किसी तरह का लौटना चाहिए। आप कनेक्शन कार्यों से स्थिति जाँच कर रहे हैं?

एक साधारण प्रोग्राम एक विंडो खुलती है और एक बटन क्लिक करने पर, डेटाबेस के लिए लिखते हैं कि लिखें। डेटाबेस के लिए लिखने के बाद, कार्यक्रम विंडो में स्थिति प्रदर्शित करना चाहिए। अपना प्रोग्राम चलाएं "नियंत्रित" प्रतिक्रिया प्राप्त करने के लिए बटन दबाएं। डेटाबेस बंद करें और फिर बटन पर क्लिक करें।

आप डिबगर & ओएस की क्षमता संदेशों को कतार में के आधार पर एक डिबगर के साथ ऐसा करने में सक्षम हो सकता है।

1

QSqlQuery::lastError() अगर QSqlQuery::exec() के माध्यम से आपकी क्वेरी में नाकाम रही है तो आपको एक त्रुटि देना चाहिए। QSqlDatabase::isOpen() को आपके कनेक्शन की स्थिति की रिपोर्ट करनी चाहिए, QSqlDatabase::lastError() भी उपलब्ध है

+0

यह उत्तर प्रश्न संपादित करने से पहले दिया गया था। लेकिन स्पष्ट संपादित के रूप में, isOpen गाड़ी है: देखने metdos का जवाब http://stackoverflow.com/a/4406934/1619432 – handle

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); 

उपरोक्त उदाहरण में, host, user, pass, और dbNameQString उदाहरण हैं कनेक्शन जानकारी युक्त। ध्यान दें कि आपको MySQL विकास शीर्षकों की आवश्यकता है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^