c++ - 如何在运行时使用模型切换 SQL 数据库
问题描述
所以我连接到这样的数据库:
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
db.open();
QSqlTableModel model;
这很好,模型指向数据库连接。这是默认连接。请参阅此处的构造函数:
QSqlTableModel::QSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase())
现在由于某种原因,我想稍后在程序中设置数据库。所以我尝试了这个:
db = QSqlDatabase::addDatabase("QSQLITE");
QSqlTableModel model;
db.setDatabaseName("database.db");
db.open();
这不起作用。如果我在模型之后直接检查:
qDebug() << db.isOpen()
它返回真。数据库是开放的。
我当时也试过:
db = QSqlDatabase::addDatabase("QSQLITE");
QSqlTableModel model;
db.close()
db.setDatabaseName("database.db");
db.open();
但是该模型仍然没有显示数据库中的任何内容。
这么短的问题:
我的应用程序中有一个指向 SQLDatabase 的模型。当我想切换到另一个数据库时,我是否必须创建一个新模型?
我是否必须销毁整个模型并在其位置创建一个新模型?
解决方案
是的,您必须创建另一个模型,因为该模型基于构造函数传递的数据库。
推荐阅读
- sql - XML 到 SQL 问题 - SQL Server
- javascript - Cannon.js - 如何为 HingeConstraint 设置旋转限制?
- asp.net-core - EF Core2.0 dbvalidation 错误未显示所有错误
- java - Tomcat 8、Hibernate 5.2、MSSQL、HikariCP 标准搜索返回 Null
- python - Filenotfounderror 文件 b'.csv' 不存在
- java - 文件导出到 jar 后给出空指针
- python - Pygame 在空闲但不在 pycharm 上工作
- r - R完全互连的加权图
- javascript - 执行后在 JavaScript 中延迟
- terraform - 使用 cURL 调用 Terraform REST API