'qt_sql_default_connection' is still in use

出現這個告警是由於打開了多個db而沒有及時關閉,網上搜了答案是使用完了執行mysql

QSqlDatabase::removeDatabase(m_connectionName);linux

泄漏的問題有所改善,但點快了仍然有問題,研究了本身的代碼才發現,原來本身每次 query時都open一下,即便每次查完後都關閉也來不及的。sql

將open 和 close函數放在構造和析構中執行;問題解決;函數

openSQLspa

 

void Worker::openDatabase()
{
    QDateTime dateTime = QDateTime::currentDateTime();
    QString m_dbName = "zzz";
    m_connectionName = "m_dbName";
    m_connectionName += dateTime.toString("_yyyyMMdd_hhmmss");

    m_db = QSqlDatabase::addDatabase("QMYSQL", m_connectionName);
    if  (!m_db.isValid()) {
        qDebug()<<"openDatabase not valid";
        return ;
    }

    m_db.setHostName("localhost");
    m_db.setUserName("root");
    m_db.setPassword("root");
    m_db.setDatabaseName(m_dbName);

    if (!m_db.open()) {
        qDebug()<<"openDatabase not open";
        return ;
    }
    m_query = new QSqlQuery(m_db);
}

 

closeSQL.net

 

 

void Worker::closeDatabase()
{
    if(m_query != NULL )
    {
        delete m_query;
        m_query = NULL;
    }

    if (m_db.isValid()) {
        if (m_db.isOpen())
            m_db.close();
        m_db = QSqlDatabase::database("", false);
        QSqlDatabase::removeDatabase(m_connectionName);
    }
    qDebug()<<"closed;";
}

 

最後是工做函數code

void Worker::slot1()
{
    QString str = "delete from test where id > 300000 ";
    QString str1 = "UPDATE test SET content = 'Checked' WHERE content = 'Wilson' ";
    QString str2 = "update test set content = 'zero.' where content > '10000' ";

    qDebug()<<"3 slots1  : "<<QThread::currentThreadId();
    tmpTime.start();
    m_db.transaction();
    for (int i = 0 ; i < 100000 ; i++ )
    {
        QString str3 = QString("insert into test(content) values('[Checked]')");
        m_query->exec(str3);
        globalVar++;
    }
    m_query->exec(str1);
    m_query->exec(str2);
    m_query->exec(str);

    m_db.commit();
    qDebug()<<"Time Elapsed: "<<tmpTime.elapsed()<<" ms";

#if 0
    while(m_query->next()) //query.next()指向查找到的第一條記錄,而後每次後移一條記錄
    {
        int ele0 = m_query->value(0).toInt();
        QString ele1 =m_query->value(1).toString();
        QString ele2 = m_query->value(2).toString();
        qDebug() << ele0 <<ele1 <<ele2 ;
    }
#endif

    qDebug()<<"query done.";
    emit sig1();

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1, Developing utilities.htm

2, Wellknown linuxcblog

3,. wellknown qtrem

 

 

 

 

 

===================================

compile mysql for qt

相關文章
相關標籤/搜索