探究QSqlDatabase::removeDatabase
2023-12-13 19:57:18
?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)都会出现下面的信息:
QSqlDatabasePrivate::removeDatabase: connection 'connection' is still in use, all queries will cease to work.
选择(3)不会。
?参考:Qt移除数据库removeDatabase()时发出警告-CSDN博客
在removeDatabase之前,要确保query和database已经被删除了。
在(1),(2)处调用该语句时,database没有被删除,所以出现了该信息。
而在(3)处调用该语句时,query和database的生命周期都结束,被析构了。
文章来源:https://blog.csdn.net/weixin_51883798/article/details/134850985
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!