sqlite2.h
#pragma once
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
class sqlite2
{
public:
sqlite2();
~sqlite2();
};
sqlite2.cpp
#include "sqlite2.h"
sqlite2::sqlite2()
{
QSqlDatabase database;
if (QSqlDatabase::contains("connection"))
{
database = QSqlDatabase::database("connection");
}
else {
database = QSqlDatabase::addDatabase("QSQLITE", "connection");
database.setDatabaseName("identifier.sqlite");
}
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else {
QSqlQuery query(database);
query.exec("select * from kmd_menu");
if (!query.exec())
{
qDebug() << "Error:" << query.lastError();
}
else {
while (query.next())
{
qDebug() << query.value("name").toString();
}
}
database.close();
}
(1)database.removeDatabase("connection");
(2)QSqlDatabase::removeDatabase("connection");
}
sqlite2::~sqlite2()
{
qDebug() << "~Sqlite2()";
(3)QSqlDatabase::removeDatabase("connection");
}
.cpp文件中有三处removeDatabase("connection");
进行3次对比实验,每次执行其中的一条语句。
选择(1),(2)都会出现下面的信息:
选择(3)不会。
参考:Qt移除数据库removeDatabase()时发出警告-CSDN博客
在removeDatabase之前,要确保query和database已经被删除了。
在(1),(2)处调用该语句时,database没有被删除,所以出现了该信息。
而在(3)处调用该语句时,query和database的生命周期都结束,被析构了。