我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Qt数据库(5) - 使用SQL Model类

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Qt数据库(5) - 使用SQL Model类

Qt数据库(5) - 使用SQL Model类

Qt Version 5.14.0

除了QSqlQuery,Qt还提供了三个高级类用来访问数据库,分别为QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel。

  • QSqlQueryModel 基于任意SQL语句的只读模型
  • QSqlTableModel 只对一张表进行操作的读写模型
  • QSqlRelationalTableModel QSqlTableModel的子类,支持外键

这三个类继承自QAbstractTableModel,这使得在ItemView类(比如QTableVIew、QListView、QTreeView)中显示数据库中的数据变得很简单。具体细节详见Qt助手关键字:Presenting Data in a Table View。

The SQL Query Model

QSqlQueryModel提供一个只读模型,该模型数据基于SQL query。示例代码如下:

QSqlQueryModel model;
model.setQuery("SELECT * FROM employee");

设置完SQL语句之后,可以使用record(int)函数来访问单独的记录,代码如下:

for (int i = 0; i < model.rowCount(); ++i) 
{
 	int id = model.record(i).value("id").toInt();
	QString name = model.record(i).value("name").toString();
	qDebug() << id << name;
 }

也可以使用从QAbstractItemModel继承的接口来访问model中的数据。 setQuery()接口还有一个重载函数,可以接收QSqlQuery对象作为参数,这样就可以利用QSqlQuery所有特性,比如占位符。

The SQL Table Model

QSqlTableModel提供一次只作用于一张表的可读写模型。示例代码如下:

 QSqlTableModel model;
 model.setTable("employee");
 model.setFilter("salary > 50000");
 model.setSort(2, Qt::DescendingOrder);
 model.select();

 for (int i = 0; i < model.rowCount(); ++i) 
 {
 	QString name = model.record(i).value("name").toString();
 	int salary = model.record(i).value("salary").toInt();
  	qDebug() << name << salary;
 }

用代码修改表中数据的流程如下:

  • 获取某一行record:model.record(i)
  • 修改record中某个字段对应的数据:record.setValue("字段名", 值)
  • 替换model中对应位置record:model.setRecord()

也可以使用从QAbstractItemModel继承的接口data()和setData(),以下代码调用setData接口完成model中的数据刷新

model.setData(model.index(row, column), 75000);
model.submitAll();

数据插入

model.insertRows(row, 1);
model.setData(model.index(row, 0), 1013);
model.setData(model.index(row, 1), "Peter Gordon");
model.setData(model.index(row, 2), 68500);
model.submitAll();

删除5行连续数据

model.removeRows(row, 5);
model.submitAll();

修改何时生效

当你修改记录时,需要调用QSqlTableModel::submitAll()来保证修改已经被写入数据库。而何时调用这个函数取决于QSqlTableModel的编辑策略

  • QSqlTableModel::OnFieldChange:无缓存,一有修改立刻写入数据库
  • SqlTableModel::OnRowChange:缓存某一行修改,当你选择其它行时,之前的修改立刻写入数据库
  • QSqlTableModel::OnManualSubmit:缓存所有修改,直到手动调用submitAll()或revertAll()

注意:对于新插入行,OnFieldChange行为与OnRowChange一致。

The SQL Relational Table Model

QSqlRelationalTableModel对QSqlTableModel进行了扩展,提供了外键支持。

如上图,左表使用QSqlTableModel,第三、四列存储的是另一个地址表的主键,不利于阅读。右表使用QSqlRelationalTableModel,可以将地址表的主键自动替换成某个其它字段,便于阅读。 示例代码如下:

 model->setTable("employee");
 model->setRelation(2, [QSqlRelation](qsqlrelation.html)("city", "id", "name"));
 model->setRelation(3, [QSqlRelation](qsqlrelation.html)("country", "id", "name"));

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Qt数据库(5) - 使用SQL Model类

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Qt数据库(5) - 使用SQL Model类

Qt Version 5.14.0除了QSqlQuery,Qt还提供了三个高级类用来访问数据库,分别为QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel。QSqlQueryModel基于任意SQL语句的
Qt数据库(5) - 使用SQL Model类
2020-08-08

qt中怎么使用sqlite数据库

在Qt中使用SQLite数据库,首先需要在项目中包含Qt的SQL模块,然后在代码中进行数据库的连接、查询等操作。以下是使用SQLite数据库的简单示例:在.pro文件中添加QT += sql,包含Qt的SQL模块在代码中连接数据库,创建表
qt中怎么使用sqlite数据库
2024-04-09

sql tinyint数据类型怎么使用

在SQL中,可以使用TINYINT数据类型来存储小整数值,范围为-128到127(有符号)或0到255(无符号)。使用TINYINT数据类型的方法如下:在创建表时指定字段的数据类型为TINYINT:CREATE TABLE my_table
sql tinyint数据类型怎么使用
2024-05-22

C/C++ Qt数据库SqlRelationalTable关联表怎么使用

本篇内容介绍了“C/C++ Qt数据库SqlRelationalTable关联表怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先我
2023-06-22

使用connectionStrings连接SQL Server数据库

要使用connectionStrings连接SQL Server数据库,您需要在应用程序的配置文件中添加一个connectionStrings节点,并在其中提供连接字符串。以下是一个示例配置文件的connectionStrings节点:``
2023-08-22

Qt使用SQLite数据库存储管理图片文件

这篇文章主要为大家详细介绍了Qt如何使用SQLite数据库实现存储管理图片文件的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2023-05-16

redis数据库使用的数据结构类型

redis 中共有 9 种数据结构类型:键值对:储存单个键值对字符串:存储文本、数字或二进制数据列表:存储有序键值对集合:存储不重复的值有序集合:存储带有分值的元素,按分值排序哈希表:存储映射到值的键值对地理空间:存储地理位置和形状超日志:
redis数据库使用的数据结构类型
2024-04-19

如何使用PL/SQL监控数据库

在Oracle数据库中,可以使用PL/SQL语言编写监控脚本来监控数据库的性能、状态和运行情况。以下是一些示例监控数据库的方法:监控数据库性能:编写PL/SQL脚本来查询数据库性能指标,如CPU利用率、内存使用情况、I/O操作等。可以使用D
如何使用PL/SQL监控数据库
2024-05-08

sql如何断开数据库的使用

可以使用 sql 语句断开数据库连接,包括:1. close 语句:立即关闭指定连接;2. disconnect 语句:关闭连接并释放资源;3. end transaction 语句:提交/回滚事务并断开连接;4. exit 语句:终止脚本
sql如何断开数据库的使用
2024-06-06

编程热搜

目录