QT 中 sqlite 数据库使用
一、前提
--pro文件添加sql模块QT += core gui sql
二、使用
说明
--用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError
查看qt支持的驱动
QStringList list = QSqlDatabase::drivers();qDebug()<<list;
连接 sqlite3 数据库
声明:
#include <QSqlDatabase>QSqlDatabase db; //该类对象,就相当于一个数据库
实现:
--通常放在构造函数中// 加载驱动db = QSqlDatabase::addDatabase("QSQLITE"); //QSQLITE驱动--连接的是sqlite3数据库//连接成功,返回一个数据库对象// 设置数据库名db.setDatabaseName("company.db");//数据库文件后缀:.db // 打开数据库 if(!db.open()) //open打开成功返回 true { qDebug()<<"数据库打开失败:"<<db.lastError(); //lastError:返回有关数据库上发生的最后一个错误的信息。}
执行 sql 语句
// 创建对象QSqlQuery query; //创建该对象是,系统自动完成和数据库的关联// 定义一条创建表的sql语句QString createTable = "create table staffInformation (id integer, name varchar(20), age int) ";// 执行sql语句if(!query.exec(createTable)){qDebug() <<"create table error:" <<db.lastError();}
// 插入数据QString insertData = "insert into staffInformation(id, name, age) values(1, 'chen', 18)";// 执行sql语句if(!query.exec(insertData)){qDebug() <<"insert data error:" <<db.lastError();}
// 查询数据QString selectData = "select * from staffInformation";// 执行sql语句if(!query.exec(selectData)){qDebug() <<"select data error:" <<db.lastError();}else{while (query.next()) {qDebug() <<query.value("id").toUInt()<<query.value("name").toString()<<query.value("age").toUInt();}}
//删除数据QString deleteData = "delete from staffInformation where id = 1;";// 执行sql语句if(!query.exec(deleteData)){qDebug() <<"delete data error:" <<db.lastError();}
// 更新数据QString updateData = "update staffInformation set name = 'yuan' where id = 1;";// 执行sql语句if(!query.exec(updateData)){qDebug() <<"update data error:" <<db.lastError();}
使用 QSqlQueryModel 模型查询数据( QSqlQUeryModel 默认是只读数据模型)
// 创建对象,并设置表头信息QSqlQueryModel *model = new QSqlQueryModel;// 执行sql语句model->setQuery("select * from staffInformation"); //将查询的结果转换成model对象(结果集)// 根据需求设置表头信息model->setHeaderData(0, Qt::Horizontal, "id");model->setHeaderData(1, Qt::Horizontal, "name");model->setHeaderData(2, Qt::Horizontal, "age");// 给ui控件设置模型QTableView *tableView = new QTableView(this);tableView->setFixedSize(this->width(), this->height());//设置tableView大小tableView->setModel(model); //传入表格模型tableView->show(); //显示表格
使用 QSqlQueryModel 模型修改数据
1,创建一个类,重写 QSqlQueryModel 虚函数
public://重写基类虚函数bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); //修改数据库数据Qt::ItemFlags flags(const QModelIndex &index) const; // 表格可编辑状态设置private://自定义函数接口void refresh();//更新数据bool setName(int useId, const QString &name);//根据需求修改表中的数据
//修改数据库数据
bool eidtQueryModel::setData(const QModelIndex &index, const QVariant &value, int role)
{//判断是否有效列if(index.column() < 1 || index.column() > 3)return false;//获取列对应的 idQModelIndex prinmaryIndex = QSqlQueryModel::index(index.row(), 0);int id = this->data(prinmaryIndex).toInt(); //获取表中字段的 id// 在修改行时,将整个model清空this->clear();//根据需求修改对应的列bool ok = false ;if(index.column() == 1){ok = setName(id, value.toString());}//刷新数据refresh();return ok;
}// 表格可编辑状态设置
Qt::ItemFlags eidtQueryModel::flags(const QModelIndex &index) const
{// 获取原有单元格的编辑状态Qt::ItemFlags flag = QSqlQueryModel::flags(index);// 给原有标志位增加一个可编辑的标志if(index.column() == 1) //仅限第一列可编辑flag = flag | Qt::ItemIsEditable; //给它设置一个可编辑的状态return flag;
}//更新数据
void eidtQueryModel::refresh()
{//相当于将数据库的数据查询出来,转换成一个modelthis->setQuery("select * from staffInformation");this->setHeaderData(0, Qt::Horizontal, "name"); //设置表头
}//根据需求修改表中的数据
bool eidtQueryModel::setName(int useId, const QString &name)
{//相当于一个刷新操作QSqlQuery query;query.prepare("update staffInformation set name = ? where id = ?");query.addBindValue(name);query.addBindValue(useId);return query.exec();
}
2,使用
// 创建模型对象eidtQueryModel *model = new eidtQueryModel;//执行sqlmodel->setQuery("select id, name, age from staffInformation");//设置表头model->setHeaderData(0, Qt::Horizontal, "id");model->setHeaderData(1, Qt::Horizontal, "name");model->setHeaderData(2, Qt::Horizontal, "age");//给ui控件设置模型QTableView *tableView = new QTableView(this);tableView->setFixedSize(this->width(), this->height());//设置tableView大小tableView->setModel(model);// 传入表格模型tableView->show(); // 显示表格
三、其他




相关文章:
QT 中 sqlite 数据库使用
一、前提 --pro文件添加sql模块QT core gui sql二、使用 说明 --用于与数据库建立连接QSqlDatabase--执行各种sql语句QSqlQuery--提供数据库特定的错误信息QSqlError查看qt支持的驱动 QStringList list QSqlDatabase::drivers();qDebug()<<list;连接 sqlite3 数据库 …...
不一样的CSS(4)--icon图标系列之svg
序言 上一节内容我们讲解了如何利用css去画一个五角星,其中包括了使用svg的方法,有些小伙伴们对svg的使用不是很了解,那么本节内容我们主要来讲一下,关于svg标签的的使用。 目录 序言一、svg的介绍二、安装SVG扩展插件三、SVG基…...
Level DB --- Cache
class Cache是Level DB中的重要的数据结构,它是一个LRU(Least Recently Used) Cache的实现。这里面的判断条件主要是内存大小(而不是存储entry的个数)。当内存达到上界,会释放不被使用的entry(存…...
学在西电录播课使用python下载,通过解析m3u8协议、多线程下载ts视频块以及ffmpeg合并
本文涵盖的内容仅供个人学习使用,如果侵犯学校权利,麻烦联系我删除。 初衷 研究生必修选逃, 期末复习怕漏过重点题目,但是看学在西电的录播回放课一卡一卡的,于是想在空余时间一个个下载下来,然后到时候就…...
Springboot3介绍
一、Springboot3简介: https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html?spmwolai.workspace.0.0.68b62306Q6jtTw#getting-started.introducing-spring-boot 无论使用XML、注解、Java配置类还是他们的混合用法,配置文件过于…...
Oracle 11G DataGuard GAP 修复过程(通过主库scn增备恢复)
Oracle 11G DataGuard GAP 修复 (通过主库scn增备恢复) 介绍 DG GAP 顾名思义就是:DG不同步,当备库不能接受到一个或多个主库的归档日志文件时候,就发生了 GAP。 那么,如果遇到GAP如何修复呢?…...
WLAN AutoConfig服务假死?重启服务恢复网络连接!
目录 背景: 过程: 可能引起原因: 具体解决步骤: 方法一: 方法二: 总结: 背景: 这个问题困扰我好长一段时间了,每次下班将电脑关机后,次日早上电脑开机…...
【linux】(30)shell-条件判断
if 语句 if 语句是 Shell 脚本中用于条件判断的基本结构。 基本语法 if 语句的基本语法如下: if [ condition ] thencommands ficondition 是要测试的条件。commands 是在条件为真时要执行的命令。 示例 简单条件判断 #!/bin/bashif [ 1 -eq 1 ] thenecho &q…...
docker安装启动问题解决排查
一、安装docker报错 刚开始安装docker报这个错: Error: Transaction test error: file /usr/libexec/docker/cli-plugins/docker-buildx from install of docker-ce-cli-1:20.10.8-3.el8.x86_64 conflicts with file from package docker-buildx-plugin-0:0.14.0…...
《MySQL 查询进阶:复杂查询语句的魅力》
一、引言 MySQL 的复杂查询语句就像是一把神奇的钥匙,能够打开数据世界的大门,展现出数据的无限魅力。本文将带你深入探索 MySQL 查询进阶技巧,从常用查询到子查询,再到视图的运用,让你领略复杂查询语句的强大功能。 …...
OpenHarmony-3.HDF框架(2)
OpenHarmony HDF 平台驱动 1.平台驱动概述 系统平台驱动框架是系统驱动框架的重要组成部分,它基于HDF驱动框架、操作系统适配层(OSAL, operating system abstraction layer)以及驱动配置管理机制,为各类平台设备驱动的实现提供标准模型。 系统平台驱动(…...
人大金仓(KingBaseEs)数据库操作手册
人大金仓数据库(KingbaseES)是由北京人大金仓信息技术股份有限公司(简称人大金仓)自主研发的、具有自主知识产权的通用关系型数据库管理系统。 官方下载地址:KingbaseES 人大金仓数据库 KES技术文档在线手册…...
Flink+Paimon实时数据湖仓实践分享
随着 Paimon 近两年的推广普及,使用 FlinkPaimon 构建数据湖仓的实践也越来越多。在 Flink 实时数据开发中,对于依赖大量状态 state 的场景,如长周期的累加指标计算、回撤长历史数据并更新等,使用实时数仓作为中间存储来代替 Flin…...
w~深度学习~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/12663254 #Motion Plan 代码 github.com/liangwq/robot_motion_planing 轨迹约束中的软硬约束 前面的几篇文章已经介绍了,轨迹约束的本质就是在做带约束的轨迹拟合。输入就是waypoint点list,约束…...
KVM 虚拟化
KVM(Kernel-based Virtual Machine)是一种基于内核的虚拟机技术,具有以下优势: 开源性:KVM是完全开源的,这意味着它没有许可费用,适合预算有限的用户。性能:KVM利用Linux内…...
MONI后台管理系统-数据库设计
前言:该文档纯属个人总结设计,如果雷同,纯属巧合,其中还有很不合理之处,请大家批评指正。如有应用于项目,请慎重。 注意: 如有需要该文件的sql脚本,请移步:资源下载 1. 表清单 序号…...
Rigol DP711自动控制--SCPI命令
通过串口的SCPI命令来控制通道输入输出 也可以用UltraSigma UI来发送SCPI 物理连接: Pin2_2, Pin3_3, Pin5_5 串口命令控制: 命令:9600, 8bit, None SCPI CMD(Standard Commands for Programmable Instruments) OUTPut CH1, On…...
总结FastDFS的面试题
目录 一:FastDFS的基础知识 1:定义 2:FastDFS的优点 3:tracker server 4:storage server 二:FastDFS的存储原理 1:小文件存储的问题 2:小文件合并存储 3:文件上…...
Fiddler 5.21.0 使用指南:过滤浏览器HTTP(S)流量下(四)
概述 在上一篇文章中,我们介绍了一部分简单的过滤功能,已经可以帮助我们较为准确的定位到感兴趣的请求;提升我们的工作效率,我们可以通过设置更为复杂的过滤规则,精准到定位的我们想要的请求和响应信息。专注于分析对…...
【踩坑】pip安装依赖卡在Installing build dependencies ...
pip安装依赖卡在Installing build dependencies ... 如图,pip安装依赖一直卡着,最后不得不ctrlC强制终止 用–verbose显示详细安装信息,发现卡在安装numpy pip install -r requirements.txt --verbose大概率是网络问题,用镜像单…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
