QSqlDatabase(2)实例,QTableView显示数据库表数据
目录
前言
1、实现的功能
2、具体的代码实现
前言
想了解QSqlDatabase基本知识的,以及增删改查的用法,可以浏览上一篇文章:
QSqlDatabase(1)基本接口,以及(增删改除)的简单实例_Ivy_belief的博客-CSDN博客
这篇主要实战,写了一个数据动态库。
1、实现的功能
先来看看要实现的页面信息:

数据库的动态库主要实现了:数据库的增、删、改、查的功能。
(1)增加数据的功能;
(2)删除数据的功能;
(3)修改数据的功能;
(4)查找数据的功能;
(5)用QTableView显示数据库表数据;
(6)直接执行sql语句的功能;
2、具体的代码实现
数据库测试工具GUI页面的主要功能:
(1)增加数据:
bool RobotDataBaseManager::addData2DB(string strOrderId, string strEntry, string strMoney, string strPlate, string strType, string strWeight)
{if (isOrderIdExist(strOrderId))return false;QString orderId = QString::fromStdString(strOrderId);QString entry = QString::fromStdString(strEntry);QString money = QString::fromStdString(strMoney);QString plate = QString::fromStdString(strPlate);QString type = QString::fromStdString(strType);QString weight = QString::fromStdString(strWeight);QSqlQuery query;QString sql = "INSERT INTO orderData (orderId, entry, money, plate, type, weight) VALUES (:orderId, :entry, :money, :plate, :type, :weight);";query.prepare(sql);query.bindValue(":orderId", orderId);query.bindValue(":entry", entry);query.bindValue(":money", money);query.bindValue(":plate", plate);query.bindValue(":type", type);query.bindValue(":weight", weight);if (!query.exec()){qDebug()<<tr("订单Id %1 ,加入缓存失败:%2").arg(orderId).arg(query.lastError().text());return false;}qDebug()<<tr("订单Id %1 已加入缓存").arg(orderId);return true;
}
(2)删除数据的功能;
bool RobotDataBaseManager::DeleteDataById(string strOrderId)
{qDebug() << "RobotDataBaseManager::DeleteDataById: " << QString::fromStdString(strOrderId);QString orderId = QString::fromStdString(strOrderId);QSqlQuery query;QString sql = "DELETE FROM orderData WHERE orderId=:orderId;";query.prepare(sql);query.bindValue(":orderId", orderId);if (!query.exec()){qDebug() << "into DeleteDataById ERROR: " << query.lastError().text();return false;}if(m_mutex4OrderId.tryLock(1*1000)==false)return false;m_curOrderId = orderId;m_mutex4OrderId.unlock();return true;
}
(3)修改数据的功能;
bool RobotDataBaseManager::UpdateDataById(string strOrderId, string strEntry, string strMoney, string strPlate, string strType, string strWeight)
{if (!isOrderIdExist(strOrderId))return false;QString orderId = QString::fromStdString(strOrderId);QString entry = QString::fromStdString(strEntry);QString money = QString::fromStdString(strMoney);QString plate = QString::fromStdString(strPlate);QString type = QString::fromStdString(strType);QString weight = QString::fromStdString(strWeight);qDebug()<< "orderId: " << orderId;qDebug()<< "entry: " << entry;qDebug()<< "money: " << money;qDebug()<< "plate: " << plate;qDebug()<< "type: " << type;qDebug()<< "weight: " << weight;QSqlQuery query;QString sql = "UPDATE orderData SET entry = :entry, money = :money, plate = :plate, type = :type, weight = :weight WHERE orderId=:orderId;";query.prepare(sql);query.bindValue(":orderId", orderId);query.bindValue(":entry", entry);query.bindValue(":money", money);query.bindValue(":plate", plate);query.bindValue(":type", type);query.bindValue(":weight", weight);if (!query.exec()){qDebug() << "UpdateDataById ERROR: " << query.lastError().text();return false;}if(m_mutex4OrderId.tryLock(1*1000)==false)return false;m_curOrderId = orderId;m_mutex4OrderId.unlock();return true;
}
(4)查找数据的功能;
bool RobotDataBaseManager::getDataById(string strOrderId, string& strEntry, string& strMoney, string& strPlate, string& strType, string& strWeight)
{qDebug() << "[数据库]:getDataById 查询所有数据: 开始~~~~~~~~~~~~~~~~~";QString orderId = QString::fromStdString(strOrderId);QSqlQuery query;QString sql = "SELECT * FROM orderData WHERE orderId=:orderId;";query.prepare(sql);query.bindValue(":orderId", orderId);if (!query.exec()){qDebug() << "into getDataById ERROR: " << query.lastError().text();return false;}while (query.next()){QString orderId = query.value("orderId").toString();qDebug() << "取得1条订单缓存数据: " << orderId;if (!orderId.isEmpty()){strEntry = query.value("entry").toString().toStdString();strMoney = query.value("money").toString().toStdString();strPlate = query.value("plate").toString().toStdString();strType = query.value("type").toString().toStdString();strWeight = query.value("weight").toString().toStdString();}}query.exec("SELECT * FROM orderData");qDebug() << "[数据库]:SELECT * FROM orderData:";while (query.next()){// 读取字段值QString name = query.value("entry").toString();QString money = query.value("money").toString();QString plate = query.value("plate").toString();QString type = query.value("type").toString();QString weight = query.value("weight").toString();// 输出结果qDebug() << "entry:" << name << ", money:" << money << ", plate:" << plate << ", type:" << type << ", weight:" << weight;}qDebug() << "[数据库]:getDataById 查询所有数据: 结束~~~~~~~~~~~~~~~~~";return true;
}
(5)用QTableView显示数据库表数据;
void RobotDataBaseManager::on_btn_showAll_clicked()
{QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "Connection1");db.setDatabaseName("trawe.db"); // 数据库文件名if (!db.open()){qDebug() << "Failed to connect to database 1.";return;}QSqlQuery query(db);QString selectQuery = "SELECT * FROM orderData";if (!query.exec(selectQuery)){qDebug() << "Failed to select data from trawe.db.";return;}QSqlTableModel * model = new QSqlTableModel(this,db);model->setTable("orderData");ui->tableView->setModel(model);model->select();QStringList tables;tables << "id"<< "订单id" << "入口" << "金额" << "车牌" << "车型" << "重量" << "时间";for(int i = 1 ; i < tables.count(); i++)model->setHeaderData(i,Qt::Horizontal,tables[i]);//设置显示框表头显示model->setSort(1, Qt::AscendingOrder);//设置按照第0列排序ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置单元格不可编辑ui->tableView->horizontalHeader()->setStretchLastSection(true);//设置最后一列填充后面表格//ui->tableView->setColumnHidden(0,true);//设置第0行隐藏ui->tableView->setColumnWidth(1,100);//设置列宽,界面看起来更舒适ui->tableView->setColumnWidth(2,100);//设置列宽,界面看起来更舒适
}
(6)直接执行sql语句的功能;
/*
(1)INSERT INTO orderData (orderId, entry, money, plate, type, weight) VALUES ("63945", "滘口", "99", "粤A777Q1", "客一", "1800");
(2)UPDATE orderData SET entry = "滘口", money = "99", plate = "粤A777Q1", type = "客一", weight = "客一" WHERE orderId="22834";
(3)DELETE FROM orderData WHERE orderId=1234567;
*/
bool RobotDataBaseManager::queryExec(string strSql)
{QString sql = QString::fromStdString(strSql);QSqlQuery query;query.prepare(sql);if (!query.exec()){qDebug() << " queryExec ERROR: " << query.lastError().text();return false;}qDebug() << "[数据库]: sql 语句执行成功: 结束~~~~~~~~~~~~~~~~~";return true;
}
上面基本也涵盖主要的代码了。
完整的项目代码已上传,需要的可以下载。
QSqlDatabase实现数据库的基本功能,以及QTableView显示数据库表数据资源-CSDN文库
相关文章:
QSqlDatabase(2)实例,QTableView显示数据库表数据
目录 前言 1、实现的功能 2、具体的代码实现 前言 想了解QSqlDatabase基本知识的,以及增删改查的用法,可以浏览上一篇文章: QSqlDatabase(1)基本接口,以及(增删改除)的简单实例_Ivy_belief的博客-CSDN…...
vue3 监听props 的变化
再三说明 仅仅个人学习用,不误导别人 我觉得props 会创建对应的属性,去接受这些值,比如传递一个ref的基本值 age props.age age.value 传递一个ref的引用值 person props.person person.value 传递一个reactive的引用值 person props.person…...
Docker容器
1、什么是docker,为什么要使用docker 有了docker,可以获取各种软件的镜像,将软件的镜像下载到linux中,基于这个镜像就能够去启动这个容器,这个容器就是这个镜像的完整运行环境,比如mysql、redis、nginx,还能秒级启动他…...
spring 请求等问题
1.post请求 /*** desc: (gateway主要接收前端请求 , 然后对请求的数据进行验证 , 验证之后请求反向代理到服务器 。*当请求 method 为 GET 时 , 可以顺利通过gateway 。 当请求 method 为 POST 时 , gateway则会报如下错误 。*jav…...
汽车制造行业,配电柜如何实施监控?
工业领域的生产过程依赖于高效、稳定的电力供应,而配电柜作为电力分配和控制的关键组件,其监控显得尤为重要。 配电柜监控通过实时监测、数据收集和远程控制,为工业企业提供了一种有效管理电能的手段,从而确保生产的连续性、安全性…...
stable diffusion实践操作-VAE
本文专门开一节写图生图相关的内容,在看之前,可以同步关注: stable diffusion实践操作 大部分底模有VAE,但是部分底模没有VAE,需要专门下载VAE才能使用。 最常用的VAE:vae-ft-mse-840000-ema-pruned 用来饱…...
《Flink学习笔记》——第一章 概念及背景
什么是批处理和流处理,然后由传统数据处理架构为背景引出什么是有状态的流处理,为什么需要流处理,而什么又是有状态的流处理。进而再讲解流处理的发展和演变。而Flink作为新一代的流处理器,它有什么优势?它的相关背…...
顺序表链表OJ题(2)->【数据结构】
W...Y的主页 😊 代码仓库分享 💕 前言: 单链表的结构常常不完美,没有双向链表那么”优秀“,所以繁衍出很多OJ练习题。今天我们继续来look look数据结构习题。 下面就是OJ时间!!! …...
css3有哪些新特性?(包含哪些模块)
css3有哪些新特性?包含哪些模块?以下是整理的21个css3新特性: 1.新增选择器 p:nth-child(n){color: rgba(255, 0, 0, 0.75)} 2.新增伪元素 ::before 和 ::after 3.弹性盒模型 display: flex; 4.多列布局 column-count: 5; 5.媒体查询 media (max-width:…...
【Grasshopper基础15】“右键菜单似乎不太对劲”
距离上一篇文章已经过去了挺久的,很长时间没有写GH基础部分的内容了,原因其一是本职工作太忙了,进度也有些落后,白天工作累成马,回家只想躺着;其二则是感觉GH基础系列基本上也介绍得差不多了,电…...
华为Mate60低调发布,你所不知道的高调真相?
华为Mate60 pro 这两天的劲爆新闻想必各位早已知晓,那就是华为Mate60真的来了!!!并且此款手机搭载了最新国产麒麟9000s芯片,该芯片重新定义了手机性能的巅峰。不仅在Geekbench测试中表现出色,还在实际应用…...
C++(18):命名空间
多个库将名字放置在全局命名空间中将引发命名空间污染。 命名空间可以用来防止名字冲突,它分割了全局命名空间,其中每个命名空间是一个作用域。通过在某个命名空间中定义库的名字,库的作者(以及用户)可以避免全局名字…...
K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(上)
温故知新 📚第一章 前言📗背景📗目的📗总体方向 📚第二章 基本环境信息📗机器信息📗软件信息📗部署用户kubernetes 📚第三章 Kubernetes各组件部署📗安装kube…...
生产环境部署与协同开发 Git
目录 一、前言——Git概述 1.1 Git是什么 1.2 为什么要使用Git 什么是版本控制系统 1.3 Git和SVN对比 SVN集中式 Git分布式 1.4 Git工作流程 四个工作区域 工作流程 1.5 Git下载安装 1.6 环境配置 设置用户信息 查看配置信息 二、git基础 2.1 本地初始化仓库 编辑…...
Qt/C++编写视频监控系统80-远程回放视频流
一、前言 远程回放NVR或者服务器上的视频文件,一般有三种方式,第一种是调用厂家的SDK,这个功能最全,但是缺点明显就是每个厂家的设备都有自己的SDK,只兼容自家的设备,如果你的软件需要接入多个厂家的&…...
用于设计和分析具有恒定近心点半径的低推力螺旋轨迹研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
MongoDB - 构造复杂查询条件执行查询
文章目录 1. 构造 keyword 的查询条件2. 构造 threatSubType 的查询条件3. 相应的实体类 /*** 查询白名单详情** param offset 第几页开始* param limit 每页显示的最大值* param keyword 模糊搜索值* param order 排序方式(升序/降序…...
如何从ChatGPT中获得最佳聊天对话效果
从了解ChatGPT工作原理开始,然后从互动中学习,这是一位AI研究员的建议。 人们利用ChatGPT来撰写文章、论文、生成文案和计算机代码,或者仅仅作为学习或研究工具。然而,大多数人不了解它的工作原理或它能做什么,所以他…...
深入浅出:手把手教你实现单链表
一、什么是链表 链表是一种链状数据结构。简单来说,要存储的数据在内存中分别独立存放,它们之间通过某种方式相互关联。 如果我们使用C语言来实现链表,需要声明一个结构体作为链表的结点,结点之间使用指针关联。 二、单向链表的结…...
vite 打包项目后访问显示空白页的问题,开发环境正常,生产环境无报错。
有没有可能, 你跟我遇到同样的问题 白屏的写法 const routes [{path: /,component: import(../views/index.vue),} ]正确的写法 const routes [{path: /,component: () > import(../views/index.vue),} ]有时候方向很重要,当在错误的方向上无脑冲…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
