QT6实现创建与操作sqlite数据库三种方式方式对比(二)

一.概述

Qt访问Sqlite数据库的三种方式(即使用三种类库去访问),QSqlQuery、QSqlQueryModel、QSqlTableModel,对于这三种类库,可看为一个比一个上层,也就是封装的更厉害,甚至第三种QSqlTableModel,根本就不需要开发者懂SQL语言,也能操作Sqlite数据库。

二.Qt读写Sqlite数据库的三种方式

1.QSqlQuery方式:

(1)上一篇文章《QT6实现创建与操作sqlite数据库(一)》已经讲述了QSqlQuery方式操作sqlite数据库,有详细代码,文章链接:

https://blog.csdn.net/xieliru/article/details/136829200?spm=1001.2014.3001.5502

(2)可以执行任意的SQL语句,可直接进行insert、delete、update等操作

优点:

完全自由编写和执行sql语句,可做任意的查询和操作

性能高,可直接操作数据库结构

支持事务

缺点:

需要自行处理结果集,较复杂

不支持直接编辑。需要自行在程序中处理添加、修改和删除。

2.QSqlQueryModel :通过设置SELECT语句查询获取内容,Model数据是只读的,不能进行编辑。所以需要结合QSqlQuery一起使用。

3.QSqlTableModel : 直接设置一个数据表的名称,可以获取数据表的全部记录,拓展在于在各种view上展示表格数据的同时,还允许用户进行编辑操作。

继承于QSqlQueryModel,与QSqlQueryModel功能相似。

比QSqlQueryModel的限制在于不能是任意sql语句,只是对单个数据表操作。

该类提供了一个可读写单张SQL表的可编辑数据模型,功能:修改,插入,删除,查询和排序。

  1. QSqlRelationalTableModel: 编辑一个数据表,将代码字段通过关系与代码表关联,将代码字段的编辑转换为直观的内容选择编辑。

  • QSqlTableModel常用函数

//获取水平头或垂直头标题

QVariant headerData ( intsection,Qt::Orientationorientation, introle= Qt::DisplayRole ) const

//设置水平头或垂直头标题

bool setHeaderData ( intsection,Qt::Orientationorientation, constQVariant&value, introle= Qt::EditRole )

//返回行数

int rowCount ( constQModelIndex&parent= QModelIndex() ) const

//返回列数

int columnCount ( constQModelIndex&index= QModelIndex() ) const

//model->removeColumns (0)删除第一列

virtual bool removeColumns ( int column, int count, const QModelIndex & parent = QModelIndex() )

//提交所有被修改的数据,然后修改的数据被保存在数据库中

bool QSqlTableModel::submitAll ()

//撤销所有的修改,如果数据库已经被提交了修改,就不能通过撤销修改改回来了

void QSqlTableModel::revertAll ()

//恢复指定行的改变

virtual void revertRow ( int row )

//筛选,按照字符串filter对数据库进行筛选,相当于SQL中的WHERE语句

void QSqlTableModel::setFilter ( const QString & filter )

//在筛选和排序的条件下,将数据库中符合要求的在mode表格中显示出来

bool QSqlTableModel::select ()

//排序操作。按照列和Qt::SortOrder排序。Qt::SortOrder有升序和降序

void QSqlTableModel::setSort ( int column, Qt::SortOrder order )

//插入行

bool insertRow ( int row, const QModelIndex & parent = QModelIndex() )

// 插入列

bool insertColumn ( intcolumn, constQModelIndex&parent= QModelIndex() )

//设置保存策略为手动提交

model->setEditStrategy(QSqlTableModel::OnManualSubmit);

参考文章:

https://blog.csdn.net/wxl1986622/article/details/107429450

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Security AuthenticatedVoter 错误访问控制漏洞复现(CVE-2024-22257)

免责声明 由于传播、利用本CSDN所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担! 一、产品介绍 Spring Security 是基于Spring应用程序的认证和访问控制框架。 二、漏洞描述 Spring Security在处理…

JJJ:改善ubuntu网速慢的方法

Ubuntu 系统默认的软件下载源由于服务器的原因, 在国内的下载速度往往比较慢,这时我 们可以将 Ubuntu 系统的软件下载源更改为国内软件源,譬如阿里源、中科大源、清华源等等, 下载速度相比 Ubuntu 官方软件源会快很多!…

[AIGC] 在Spring Boot中指定请求体格式

在使用Spring Boot开发Web应用的时候,我们经常会遇到需要接收并处理HTTP请求的情况。一个HTTP请求通常包括一个请求行、若干请求头和一个请求体。请求体在POST和PUT请求中特别重要,因为它通常用于向服务器传递数据。 文章目录 创建并使用一个Java Bean指…

【技术栈】Redis 企业级解决方案

​ SueWakeup 个人主页:SueWakeup ​​​​​​​ 系列专栏:学习技术栈 ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ 个性签名&…

突发需求下的IT部门挑战与解决:沟通协作关键不可或缺

摘要: 在当今信息化时代,IT部门作为企业技术支持的核心,经常面临各种突发需求挑战。本文深入探讨突发需求对IT部门的影响,分析工作计划打乱、快速响应压力和协作困难等问题。重点阐述了在应对突发需求时的核心应对策略&#xff0c…

​备案是否是《标准合同》的生效要件?​

备案是否是《标准合同》的生效要件? 备案并非是标准合同条款的生效要件。 《个人信息出境标准合同办法》第三条明确个人信息出境标准合同的使用规则是以“自主缔约与备案管理”相结合,企业不进行备案并不影响合同的效力,但是如果企业不完成备…

在工业物联网应用中保护数据隐私和安全的最佳实践

在工业物联网(IIoT)应用中,保护数据隐私和安全是一项至关重要的工作,因为这些设备常常连接到关键基础设施,并处理敏感数据。以下是一些保护数据隐私和安全的最佳实践: 实施严格的访问控制: 使用…

QT 驾校系统界面布局编写

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);this->resize(ui->label_img->width(),ui->label_img->height());//图片自适应窗口大小ui->label_img->setScaledContents(true);//图片置…

信息发布系统

特色功能 画布功能---可任意拖动各控件的播放位置及大小,可任意选择屏幕背景色或添加背景图 同步联屏---毫秒级同步功能 视频切换无黑屏 触摸查询系统 会议预定系统 终端显示-会议综合屏 终端显示-会议预定屏 终端显示-移动端 广告发布系统 硬件产品-智能终端 硬件…

HTML_CSS学习:超链接、列表、表格、表格常用属性

一、超链接_唤起指定应用 1.相关代码 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>超链接_唤起指定应用</title> </head> <body><a href"tel:10010">电话联…

C# 数组(Array)

C# 数组&#xff08;Array&#xff09; 初始化数组 声明一个数组不会在内存中初始化数组。当初始化数组变量时&#xff0c;您可以赋值给数组。 数组是一个引用类型&#xff0c;所以您需要使用 new 关键字来创建数组的实例。 例如&#xff1a; double[] b new double[10];…

编织效率之梦:Visual Studio与Windows快捷键指南

个人主页&#xff1a;日刷百题 系列专栏&#xff1a;〖C/C小游戏〗〖Linux〗〖数据结构〗 〖C语言〗 &#x1f30e;欢迎各位→点赞&#x1f44d;收藏⭐️留言&#x1f4dd; ​ ​ 前言&#xff1a; 常用快捷键整理 (用加粗标注的是我个人使用时常用的&#xff0c;其实这个…

【算法专题--双指针算法】leecode-202. 快乐数(medium)、leecode-11. 盛最多水的容器(medium)

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1. 快乐数&#xff0…

VM创建win11虚拟机

1. 准备文件 通过微软官网下载iso磁盘映像文件Download Windows 11 2. 虚拟机创建 (1)创建新的虚拟机-导入win11 iso文件; (2)命名并选择安装位置; (3)选择加密(最好找个是方保存下密码) (4)磁盘情况默认就好。虚拟机的磁盘空间随着文件的增多物理机也会占用磁盘空间. (5) 自定…

应用方案 | D78040场扫描电路

D78040是一款场扫描电路&#xff0c;偏转电流可达1.7Ap-p&#xff0c;可用于中小型显示器。 二 特 点 1、有内置泵电源 2、垂直输出电路 3、热保护电路 4、偏转电流可达1.7Ap-p 三 基本参数 四 应用电路图 1、应用线路 2、PIN5脚输出波形如下&#xff1a;

常用编程语言语法对比

特性JavaJavaScriptPython基本数据类型 字符串 Stringstringstr整形byte, short, int, longnumberint浮点型float, doublenumberfloat布尔型booleanbooleanbool(True or False)对象类型数组/列表定义int[] numbers {1, 2, 3, 4, 5};&#xff08;长度不可变&#xff09;let num…

阿里云服务器ECS u1实例199元一年性能如何?一测吓一跳

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xff0c…

室友打团太吵?一条命令断掉它的WiFi

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;更多干货&#xff0c;请关注专栏《网络安全自学教程》 ARP欺骗原理 1、arpspoof实现ARP欺骗1.1、主机探测1.2、欺骗…

数据之谜:解读Facebook的用户行为

在当今数字化时代&#xff0c;社交媒体平台已经成为人们生活中不可或缺的一部分&#xff0c;而Facebook作为全球最大的社交网络之一&#xff0c;其背后隐藏着许多数据之谜。本文将深入探讨Facebook的用户行为&#xff0c;并试图解读其中的奥秘。 用户行为数据的收集 Facebook作…

MapReduce框架原理

目录 前言一、InputFormat数据输入1.1 切片与MapTask并行度决定机制1.1.1 问题引出1.1.2 MapTask并行度决定机制1.1.3 数据切片与MapTask并行度决定机制 1.2 FileInputFormat切片机制1.2.1 切片大小参数配置1.2.2 切片机制 1.3 TextInputFormat1.3.1 FileInputFormat实现类1.3.…