QSqlDatabase打开的数据库,为何QSqlQueryModel不需要关联也能使用? 还有QSqlQueryModel可以快速枚举1列的值吗?

baidu_28726667 2019-04-16 03:08:19
/*加载驱动*/
QSqlDatabase *myDataBases = new QSqlDatabase(QSqlDatabase::addDatabase("QMYSQL"));

/*填写连接参数*/
myDataBases->setHostName("127.0.0.1");
myDataBases->setPort(3306);
myDataBases->setUserName("root");
myDataBases->setPassword("root123");
myDataBases->setDatabaseName("test");

/*打开数据库*/
if(!myDataBases->open())
{
QMessageBox::critical(this,"错误","打开数据库失败");
}

/*查找数据*/
QSqlQueryModel *model = new QSqlQueryModel();
model->setQuery("select * from t_person_name_temp;");
model->setHeaderData(0, Qt::Horizontal, tr("序号"));
model->setHeaderData(1, Qt::Horizontal, tr("日期"));
model->setHeaderData(2, Qt::Horizontal, tr("名字"));
model->setHeaderData(3, Qt::Horizontal, tr("职位"));

/*显示数据*/
ui->tableView->setModel(model);



代码使用了QSqlDatabase::addDatabase("QMYSQL")); 加载了数据库驱动. 以前用QSqlQuery这个对象会在初始化的时候就会关联 QSqlDatabase对象,然后执行QSqlQuery.exec()方法执行sql. 但是我这里QSqlQueryModel *model并没有关联这个QSqlDatabase的对象啊. 它为什么能查询到数据??? 要是这样能查到.那一个进程里面连了不只一个数据库不就互相覆盖了....?! 另外有个问题就是QSqlQueryModel 能否快速把 position 这一列枚举为其它东西呢? 例如 0是经理,1是组长,2是普通员工?!



...全文
796 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
浮一大白开水 2019-04-16
  • 打赏
  • 举报
回复
QSqlDatabase打开数据库完成后,应该是在驱动层产生实际与数据库的连接,应用使用的是驱动返回的连接别名,QSqlQueryModel 访问数据库也是同理,未指定QSqlDatabase 时驱动使用默认连接。
浮一大白开水 2019-04-16
  • 打赏
  • 举报
回复 1
文档中已经有说明: QSqlDatabase与QSqlQueryModel ,QSqlDatabase打开的数据库暴露出来的是一个连接名,如果同时连接多个数据库,则需要指定多个名称,否则选择默认连接。 QSqlQueryModel 的说明中有一句:QSqlQueryModel can also be used to access a database programmatically, without binding it to a view: 明显就是说不用直接关联特定数据库,setQuery(const QSqlQuery &query)连接默认数据库, setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())连接指定数据库。

21,487

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧