Предупреждение удалить базу данных
мой код показывает следующее предупреждение:
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();
Как я могу это исправить?
Спасибо вам большое.
Ответы
Ответ 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;