Предупреждение удалить базу данных - программирование
Подтвердить что ты не робот

Предупреждение удалить базу данных

мой код показывает следующее предупреждение:

QSqlDatabasePrivate::removeDatabase: connection ‘qt_sql_default_connection’ 
is still in  use, all queries will cease to work

Это мой код, соединение с базой данных в порядке:

QSqlDatabase database::db()
{
    return m_db;
}

bool database::connect()
{
    m_db = QSqlDatabase::addDatabase("QMYSQL");
    m_db.setDatabaseName("aaaa");
    m_db.setHostName("192.168.xxx.xxx");
    m_db.setUserName("xx");
    m_db.setPassword("xxxx");
    m_db.setPort(1234);

    return m_db.open();
}

void database::close()
{
    QString connection;
    connection = m_db.connectionName();
    m_db.close();
    m_db.removeDatabase(connection);
}

m_db определяется как:

 QSqlDatabase m_db;

и мой тест:

database db;
qDebug() << "CONNECT: " << db.connect();
db.close();

Как я могу это исправить?

Спасибо вам большое.

4b9b3361

Ответ 1

После того, как вы его закрыли, m_db все еще содержит ссылку на базу данных, настроенную в connect().

Вы можете reset m_db назначить построенный по умолчанию QSqlDatabase:

void database::close()
{
    QString connection;
    connection = m_db.connectionName();
    m_db.close();
    m_db = QSqlDatabase();
    m_db.removeDatabase(connection);
}

Ответ 2

void database::close()
{
    QString connection;
    connection = m_db.connectionName();
    m_db = QSQlDatabase();
    //m_db.close();
    m_db.removeDatabase(connection);
}

попробуйте, это сработает.

Ответ 3

Добавление дополнительной области делает тот же трюк:

QString connectionName;
bool ok = false;

{
    QSqlDatabase db = QSqlDatabase::addDatabase(databaseType);
    connectionName = db.connectionName();
    db.setHostName(hostname);
    db.setDatabaseName(databaseName);
    db.setUserName(userName);
    db.setPassword(password);
    ok = db.open();
    db.close();
} 

QSqlDatabase::removeDatabase(connectionName);
return ok;