无法删除 QSql数据库 - 查询仍处于活动状态
QSqlDatabase can't be removed - Queries still active
我最近开始使用c ++ QT。我创建了类"ControllerOfDB"来保存指向我的QSqlDatabase的指针和一些函数(进行插入/选择(。示例选择功能:
QList<data1> GetData1()
{
QList<data1> output;
if(!dataBase->isOpen())
dataBase->open();
if(dataBase->isOpen())
{
QSqlQuery* query = new QSqlQuery(*dataBase);
query->prepare("SELECT * FROM table1");
if(query->exec())
while (query->next())
{
output.append( *(new data1(
query->value(0).toInt(),
query->value(1).toString(),
query->value(2).toInt(),
query->value(3).toInt(),
query->value(4).toInt(),
)) );
}
query->clear();
query->finish();
delete query;
}
return output;
}
一切都很好,直到我不得不添加更改数据库或以其他用户身份登录的可能性。我修改了连接和断开连接功能。经过几次迭代,这就是我得到的:
void Connect()
{
dataBase = new QSqlDatabase(QSqlDatabase::addDatabase("QPSQL", "Main"));
dataBase->setHostName(hostName);
dataBase->setPort(port);
dataBase->setDatabaseName(dbName);
dataBase->setUserName(userName);
dataBase->setPassword(userPass);
if(!dataBase->isOpen())
dataBase->open();
}
void Disconnect()
{
if(dataBase != NULL)
if(dataBase->isOpen()){
dataBase->close();
dataBase->removeDatabase("Main");
dataBase = NULL;
}
}
hostName、port、dbName、userName 和 userPass 也是该类的属性。
public:
QSqlDatabase *dataBase;
QString hostName;
int port;
QString dbName;
QString userName;
QString userPass;
每当我尝试 diconnect 并创建新连接时,我都会收到有关当前连接查询的警告/错误 - 即使我只"连接"( = 使用的函数 Connect(( (。我已经看到很少类似的主题和文档,说我必须从范围中删除查询,但此时我不知道如何。
当您查看QSqlDatabase
文档时,方法removeDatabase
是静态的,因此您的方法Disconnect
逻辑应该是这样的:
void Disconnect()
{
if(dataBase != NULL) {
if(dataBase->isOpen()){
dataBase->close();
}
delete dataBase;
dataBase = NULL;
}
QSqlDatabase::removeDatabase("Main");
}
相关文章:
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 在使用 gSoap 链接多个 SOAP 服务时启用保持活动状态
- 生成线程并在运行时执行其他操作,只要它处于活动状态
- 如何确定boost msm中的特定状态是否为活动状态
- GCC (libstdc++) 运行时如何在异常处于活动状态时决定终止 ()
- “B1的多重定义”,即使警卫处于活动状态
- 全局挂钩 DLL 仅在 C# 主窗口处于活动状态/前台时调用 C# 回调方法
- 保持 boost.process 在函数之外处于活动状态,该函数被调用
- 当 /Whorearchive选项处于活动状态时,无法使用Visual Studio链接到Windows上的自构建张量
- IBM Rhapsody c++ 代码生成 - 为什么总是在状态图周围放置一个活动状态
- 暂停游戏OnSteamVR叠加层处于活动状态
- 我怎么知道哪种上下文处于活动状态
- 如何使用QEvent::WindowBlocked,以便特定窗口始终处于活动状态?
- 如何保持异步函数中使用成员的shared_ptr对象的活动状态?
- 错误保持活动状态延迟
- 如何在C API中检查MySql连接是否处于活动状态
- 类的堆分配对象是否在其作用域之后但在 C++ 中调用其析构函数之前处于活动状态
- 当条件处于活动状态时停止 arduino 循环
- 如何防止我的dll在某个进程未处于活动状态时运行
- 无法删除 QSql数据库 - 查询仍处于活动状态