Я запутался в руководстве, должен ли я работать следующим образом:
{
QSqlDatabase db = QSqlDatabase::addDatabase (...);
QSqlQuery query (db);
query.exec (...);
}
QSqlDatabase::removeDatabase (...);
Как указывается в документе, query
или db
будут автоматически деконструированы.
Но эффективен ли он?
Ну, если я cache db
внутри класса, например:
class Dummy {
Dummy() {
db = QSqlDatabase::addDatabase (...);
}
~Dummy() {
db.close();
}
bool run() {
QSqlQuery query (db);
bool retval = query.exec (...);
blabla ...
}
private:
QSqlDatabase db;
};
Иногда я мог видеть предупреждения вроде:
QSqlDatabasePrivate::removeDatabase: connection 'BLABLA' is still in use, all queries will cease to work.
Даже если я не звонил run()
.