【Qt】数据库管理
数据库查询工具开发学习笔记
一、项目背景与目标
背景:频繁编写数据库查询语句,希望通过工具简化操作,提升效率。
二、总体设计思路
1. 架构设计
MVC模式:通过Qt控件实现视图(UI),业务逻辑(数据库操作、查询处理)封装在dataQueryImpl类中,使用QSqlQueryModel作为数据模型显示查询结果。模块化设计:分离数据库连接管理、UI初始化、查询逻辑、历史记录等功能,便于维护和扩展。
2. 核心功能模块
- 数据库连接管理:支持动态切换数据库路径,处理连接创建、关闭、错误处理。
- 可视化UI:通过
QSplitter分隔左右区域,左侧显示表和列结构,右侧输入查询条件并展示结果。 - 查询功能:支持自由SQL输入和可视化条件拼接(通过列选择、运算符下拉框、值输入)。
- 查询历史:记录最近50条查询语句,便于快速复用。

三、核心代码解析
1. 数据库连接与切换(核心逻辑)
void dataQueryImpl::setDB(const QString& dbPath) {// 1. 关闭旧连接if (db.isOpen()) db.close();// 2. 移除旧默认连接(避免重复)QSqlDatabase::removeDatabase("");// 3. 创建新连接db = QSqlDatabase::addDatabase("QSQLITE", "");db.setDatabaseName(dbPath);// 4. 打开数据库并处理错误if (!db.open()) {qCritical() << "数据库打开失败:" << db.lastError().text();} else {qDebug() << "数据库路径已更新为:" << dbPath;updateUI(); // 刷新表列表}
}
- 设计要点:显式管理数据库连接,避免内存泄漏;切换数据库后自动刷新表列表(
updateUI)。
3. 查询逻辑与结果展示
QSqlQueryModel* dataQueryImpl::queryData(const QString& query) {QSqlQueryModel* newModel = new QSqlQueryModel();newModel->setQuery(query, db); // 指定数据库连接if (newModel->lastError().isValid()) {qDebug() << "Query error:" << newModel->lastError().text();}appendQueryHistory(query); // 记录查询历史return newModel;
}void dataQueryImpl::onExecuteQueryButtonClicked() {QString query = queryInput->text();QSqlQueryModel* newModel = queryData(query);tableView->setModel(newModel);// 释放旧模型内存if (model != newModel) delete model;model = newModel;
}
- 关键逻辑:使用
QSqlQueryModel直接绑定数据库查询结果到表格;查询前记录历史,支持最多50条记录的循环存储。
4. 条件查询与可视化拼接
void dataQueryImpl::onAddConditionButtonClicked() {QString column = columnListView->currentIndex().data().toString();QString sqlOp = conditionOperatorComboBox->currentData().toString();QString value = valueInput->text().trimmed();// 格式化值(处理引号、LIKE通配符等)QString formattedValue = valueFormatters[sqlOp].arg(value);QString condition = column + " " + sqlOp + " " + formattedValue;// 拼接多个条件(使用AND连接)conditionsInput->setText(conditionsInput->text().isEmpty() ? condition : conditionsInput->text() + " AND " + condition);
}QSqlQueryModel* dataQueryImpl::queryDataByConditions(const QString& tableName, const QMap<QString, QString>& conditions) {QString query = "SELECT * FROM " + tableName;if (!conditions.isEmpty()) {query += " WHERE " + conditions.keys().join(" = :") + " = :"; // 简化条件拼接}return queryData(query);
}
onditions.keys().join(" = :") + " = :"; // 简化条件拼接}return queryData(query);
}
gitee项目地址
相关文章:
【Qt】数据库管理
数据库查询工具开发学习笔记 一、项目背景与目标 背景:频繁编写数据库查询语句,希望通过工具简化操作,提升效率。 二、总体设计思路 1. 架构设计 MVC模式:通过Qt控件实现视图(UI),业务逻辑…...
Ant Design Vue 中的table表格高度塌陷,造成行与行不齐的问题
前言: Ant Design Vue: 1.7.2 Vue2 less 问题描述: 在通过下拉框选择之后,在获取接口数据,第一列使用了fixed:left,就碰到了高度塌陷,查看元素的样式结果高度不一致,如&#x…...
面经-项目
项目 项目(重点)问题1:描述在网页中题目点击提交后到题目结果出现的一系列后台反应【1】如何获取到用户提交的代码的?【2】_1. 题目细节都有哪些?【2】_2. 题目信息怎么存储的?【3】负载均衡算法的实现?【4】oj_server怎么连接对应的compile_server(编译主机)的?【5】oj_…...
Win10安装Linux的三种方法
通过 Windows 子系统 for Linux(WSL)安装 启用 “适用于 Linux 的 Windows 子系统” 可选功能: 图形界面方式:在【设置 -> 更新与安全 -> 开发者选项】中开启【开发人员模式】;在【程序和功能 -> 启用或关闭…...
【qt】文件类(QFile)
很高兴你能看到这篇文章,同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 : https://www.yuque.com/alive-m4b9n 目录 QFile 主要功能QFile 操作步骤QFile 其他常用函数案例分析及实现功能一实现:打开文件并显示功能二实现:另…...
力扣hot100——最长连续序列(哈希unordered_set)
题目链接:最长连续序列 1、错解:数组做哈希表(内存超出限制) int longestConsecutive(vector<int>& nums) {vector<bool> hash(20000000010, false);for(int i0; i<nums.size();i){hash[1000000000nums[i]]t…...
3. 实战(一):Spring AI Trae ,助力开发微信小程序
1、前言 前面介绍了Spring boot快速集成Spring AI实现简单的Chat聊天模式。今天立马来实战一番,通过Trae这个火爆全网的工具,来写一个微信小程序。照理说,我们只是极少量的编码应该就可以完成这项工作。开撸~ 2、需求描述 微信小程序实现一…...
MySQL高级语句深度解析与应用实践
一、窗口函数:数据分析的利器 1. 窗口函数基础概念 窗口函数(Window Function)是MySQL 8.0引入的强大特性,它可以在不减少行数的情况下对数据进行聚合计算和分析 SELECT employee_name,department,salary,RANK() OVER (PARTITION BY department ORDER…...
SSE服务器主动推送至浏览器客户端,让你不再需要websocket
Server-Sent Events(SSE)是一种服务器向客户端推送实时更新的技术,基于HTTP协议。客户端通过EventSource API来接收事件流,而服务器则保持一个长连接,持续发送数据。这与传统的请求-响应模式不同,允许服务器…...
UE5新材质系统效果Demo展示
1、玉质材质,透明玻璃材质,不同透射和散射。 2、浅水地面,地面层,水层,地面湿度,水面高度,水下扰动,水下浇洒,水下折射 Substrate-Water Substrate-Water-CodeV2...
wps 怎么显示隐藏文字
wps 怎么显示隐藏文字 》文件》选项》视图》勾选“隐藏文字” wps怎么设置隐藏文字 wps怎么设置隐藏文字...
解决 macOS (M1 Pro) 上使用 Vite 进行 Build 打包时 Node 进程内存溢出的问题
解决 macOS (M1 Pro) 上使用 Vite 进行 Build 打包时 Node 进程内存溢出的问题 在搭载 M1 Pro 芯片的 macOS 系统上,使用 Vite 进行项目构建(build)时,您可能会遇到 Node 进程内存溢出的错误。特别是在使用较新版本的 Node.js&am…...
页面重构过程中如何保证良好的跨浏览器一致性?
在页面重构的过程中,为了确保网页能够在不同的浏览器中呈现一致的效果,我们需要采取一系列措施来提高跨浏览器的一致性。以下是几个关键步骤和技术要点: 使用标准化的HTML和CSS:始终遵循最新的Web标准编写代码,例如采用…...
CXL UIO Direct P2P学习
前言: 在CXL协议中,UIO(Unordered Input/Output) 是一种支持设备间直接通信(Peer-to-Peer, P2P)的机制,旨在绕过主机CPU或内存的干预,降低延迟并提升效率。以下是UIO的核心概念及UI…...
leetcode138.随即链表的复制
思路源于 【力扣hot100】【LeetCode 138】随机链表的复制|哈希表 采用一个哈希表,键值对为<原链表的结点,新链表的结点>,第一次遍历原链表结点时只创建新链表的结点,第二次遍历原链表结点时,通过键拿…...
03_MySQL工具介绍
文章目录 一、Navicat for MySQL1.1、安装 二、SQLyog2.1、安装 多数时候使用SQL语句对数据库进行操作不是很方便,特别是在查询操作时,显示的内容不够直观,此时我们需要借助图形化工具对数据库进行操作。 操作MySQL常用的图形工具如下&#x…...
《网络管理》实践环节01:OpenEuler22.03sp4安装zabbix6.2
兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 1 环境 openEuler 22.03 LTSsp4PHP 8.0Apache 2Mysql 8.0zabbix6.2.4 表1-1 Zabbix网络规划(用你们自己的特征网段规划) 主机名 IP 功能 备注 zbx6svr 19…...
Qt Creator 中文 “error: C2001: 常量中有换行符“ 问题解决方法
Qt Creator 编译时出现中文 error: C2001: 常量中有换行符的问题,通常由文件编码与编译器字符集不兼容导致。 一、修改文件编码格式 添加 UTF-8 BOM 签名 在 Qt Creator 中设置:工具 -> 选项 -> 文本编辑器 -> 行为 -> UTF-8 BOM&a…...
Charles 抓包配置保姆教程(PC、IOS、Android)
抓包工具基础配置与使用指南 大家好,我是十一!今天给大家分享一篇关于抓包工具的基础配置与使用指南。无论是开发、测试还是安全分析,抓包工具都是不可或缺的利器。本文将详细介绍如何配置和使用抓包工具,并特别推荐一款功能强大…...
洛谷题单1-P1001 A+B Problem-python-流程图重构
题目描述 输入两个整数 a,b,输出它们的和(∣a∣,∣b∣≤109)。 输入格式 两个以空格分开的整数。 输出格式 一个整数。 输入输出样例 输入 20 30输出 50方式-print class Solution:staticmethoddef oi_input():"""从…...
el-table 动态给每行增加class属性
el-table 动态给每行增加class属性 html代码 row-class-name属性,绑定方法 :row-class-name“tableRowClassName”, <el-table :data"tableData" border :row-class-name"tableRowClassName"> </el-table>js代码 tableRowClassNam…...
Opencv计算机视觉编程攻略-第四节 图直方图统计像素
Opencv计算机视觉编程攻略-第四节 图直方图统计像素 1.计算图像直方图2.基于查找表修改图像3.直方图均衡化4.直方图反向投影进行内容查找5.用均值平移法查找目标6.比较直方图搜索相似图像7.用积分图统计图像 1.计算图像直方图 图像统计直方图的概念 图像统计直方图是一种用于描…...
深度学习处理时间序列(5)
Keras中的循环层 上面的NumPy简单实现对应一个实际的Keras层—SimpleRNN层。不过,二者有一点小区别:SimpleRNN层能够像其他Keras层一样处理序列批量,而不是像NumPy示例中的那样只能处理单个序列。也就是说,它接收形状为(batch_si…...
Mysql 索引性能分析
1.查看CRUD次数 show global status like Com_______(7个下划线) show global status like Com_______ 2.慢SQL分析 SET GLOBAL slow_query_log ON;-- 设置慢SQL日志记录开启 SET GLOBAL long_query_time 2; -- 设置执行超过 2 秒的查询为慢查询 开…...
win11+ubuntu双系统安装
操作步骤: 官网下载ubuntu 最新镜像文件 准备U盘 准备一个容量不小于 8GB 的 U 盘,用于制作系统安装盘。制作过程会格式化 U 盘,请注意提前备份数据。 制作U盘启动盘 使用rufus工具,或者 balenaEtcher工具(官网安…...
linux-5.10.110内核源码分析 - 写磁盘(从VFS系统调用到I/O调度及AHCI写磁盘)
1、VFS写文件到page缓存(vfs_write) 1.1、写裸盘(dd) 使用如下命令写裸盘: dd if/dev/zero of/dev/sda bs4096 count1 seek1 1.2、系统调用(vfs_write) 系统调用栈如下: 对于调用栈的new_sync_write函数,buf为写磁盘的内容的内存地址&…...
arinc818 fpga单色图像传输ip
arinc818协议支持的常用线速率如下图 随着图像分辨率的提高,单lane的速率无法满足特定需求,一种方式是通过多个LANE交叉的去传输图像,另外一种是通过降低图像的带宽,即通过只传单色图像达到对应的效果 程序架构如下图所示&#x…...
业务流程先导及流程图回顾
一、测试流程回顾  1. 备测内容回顾  备测内容: 本次测试涵盖买家和卖家的多个业务流程,包括下单流程、发货流程、搜索退货退款、支付抢购、换货流程、个人中心优惠券等。 2. 先测业务强调  1)测试业务流程 …...
HCIP(RSTP+MSTP)
一、STP的重新收敛: 复习STP接口状态 STP初次收敛至少需要50秒的时间。STP的重新收敛情况: 检测到拓扑变化:当网络中的链路故障或新链路加入时,交换机会检测到拓扑变化。 选举新的根桥:如果原来的根桥故障或与根桥直…...
《无线江湖五绝:BLE/WiFi/ZigBee的频谱大战》
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 文章目录 **第一回武林大会,群雄并起****第二回WiFi的“降龙十八掌”****第三回BLE的“峨眉轻功”****第四回ZigBee的“暗器百解”****第五回LoRa的“千里传音”****第六回NB…...
