qt学习笔记(九)之数据库_初窥用户接口层
来源:互联网 发布:山西 软件开发水平 编辑:程序博客网 时间:2024/05/17 00:54
前面两节主要介绍SQL接口层,这节我们来初窥用户接口层。
在之前已经说了用户接口层提供从数据库数据到用户数据表示的窗体的映射。
除了QSqlQuery类外,Qt还提供了三种用于访问数据库的高层类。
类名用途QSqlQueryMdoel基于任意SQL语句的只读模型QSqlTableModel基于单个表的读写模型QSqlReltionalTableModelQSqlTableModel的子类,增加了外键支持这三个类在不涉及数据库库的图形表示时可以单独使用,进行数据库操作。同时也可以作为数据源映射到QListView和QTableView等基于视图模式的Qt类中表示出来。下面的代码是在上一节的基础上添加的。
1、QSqlQueryMdoel
QSqlQueryModel *model = new QSqlQueryModel(); model->setQuery("SELECT table_user.user_id, table_group.group_name FROM table_group," "table_user WHERE table_group.group_id=table_user.group_id"); for(int i = 0; i < model->rowCount(); i++) { qDebug() << model->record(i).value("user_id").toString(); qDebug() << model->record(i).value("group_name").toString(); }这段代码使用了多表查询,目的是得到工号和对应组别的数据。
这里顺带提一提SQLite 多表查询的方法。
多表查询方法:
sqlite3可以有多种多表查询方法,比如 select (select * from table2) from table1 where xxx=xxx;
select table1.abc from table1,table2 where table1.xxx=table2.xxx;
或这种
select table1.abc from table1 inner join table2 on table1.xxx=table2.xxx;在使用QSqlQueryModel::setQuery()进行查询语句的设置后(执行后得到查询结果集),我们就可以使用record(i)访问每一条单独的记录了。2、QSqlTableModel
QSqlTableModel tablemodel; //单表查询 tablemodel.setTable("table_user"); //绑定表 tablemodel.setFilter("group_id=1"); //设置查询条件 tablemodel.select(); //查询 for(int i = 0; i < tablemodel.rowCount(); i++) { qDebug() << tablemodel.record(i).value(1).toString(); }QSqlTableModel的使用也比较简单。注意的一点是,他只能操作单个表。
因为table_user表只有2个字段。所以通过value()指定字段索引的时候,直接写了索引值。在操作大量数据的时候,最好通过索引指定字段。如:
int UserID_Index = tablemodel.record().indexOf("user_id");qDebug() << tablemodel.record(i).value(UserID_Index).toString();或者
tablemodel.record(i).value("user_id").toString();
注意,一定要调用select()。否则不能得到查询结果集
3、QSqlReltionalTableModel
QSqlRelationalTableModel *model = new QSqlRelationalTableModel(); model->setTable("table_user"); model->setRelation(1, QSqlRelation("table_group", "group_id", "group_id")); //表明table_group.group_id是table_group的主键 model->setHeaderData(0, Qt::Horizontal, tr("工号")); model->setHeaderData(1, Qt::Horizontal, tr("组别")); if(!model->select()) { QMessageBox::critical(this, tr("错误提示"), model->lastError().text(), QMessageBox::Cancel); }
QSqlReltionalTableModel的用法和QSqlTableModel大同小异。第四行和第五行的作用相当为model的表头指定列设定名称(相当于数据库字段的别名)
在这里附上程序源代码下载链接:qt_数据库_初窥用户接口层
以上纯属个人学习笔记,如果哪里错了,希望提出。愿和大家一起共同学习,一起进步。我的邮箱地址是:xzy@yingzhi8.com
- qt学习笔记(九)之数据库_初窥用户接口层
- qt学习笔记(九)之数据库_初窥用户接口层
- QT开发(四十九)——数据库用户接口层
- Qt学习笔记(九)数据库
- QT学习笔记之九 SpliterEditor
- QT之GUI学习笔记(九)----状态栏
- Caffe学习笔记(九)——python接口各网络层构建
- 数据库学习笔记(九)
- QT开发(四十八)——数据库SQL接口层
- QT学习笔记(九):创建QT的共享库
- java 从零开始,学习笔记之基础入门<抽象类_接口_多态>(十三)
- qt学习笔记(七)之数据库简介
- qt学习笔记(七)之数据库简介
- Qt学习笔记之数据库的连接
- Qt学习笔记之数据库的访问
- Kinect开发学习笔记之(九)彩色、深度、骨骼和用户抠图结合
- QT学习笔记_布局
- Flex 学习之路之九 用户接口user interface includeInLayout 和visible区别
- 书写测试用例之--- 等价类划分 法
- 【android学习之十三】——SDK实例NotePad 分析2
- Hadoop之更快的排序
- dom4j 的简单学习
- sqlplus命令学习
- qt学习笔记(九)之数据库_初窥用户接口层
- C++编程规范 编程风格
- jabberd 系统架构
- C++编程规范 函数与操作符
- php的东东
- C 温故
- volatile 的含义
- C++编程规范 类的设计与继承
- 删除QTP步骤