Mysql 警告:删除数据库

Mysql 警告:删除数据库,mysql,database,qt,Mysql,Database,Qt,我的代码显示以下警告: 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 = QSqlD

我的代码显示以下警告:

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();
数据库数据库;

qDebug()关闭后,
m_db
仍保留对您在
connect()
中配置的数据库的引用

通过指定默认构造的
QSQLDABASE
,可以重置
MUDB

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

试试这个,它会起作用的。

添加一个额外的作用域也会起同样的作用:

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;

非常感谢你现在所有的一切当然这必须发生在我周五晚些时候和发布日期。。。我确信在调用close()之后,对连接的所有引用都将消失!一点也不直观@我欠你10杯啤酒;)
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;