Qt数据库编程详解:SQLite实战指南


目录
  1. SQLite数据库简介
  2. Qt数据库核心类
  3. 数据库操作全流程
  4. CRUD操作实战
  5. 运行效果展示

1. SQLite数据库简介

SQLite是Qt内置的轻量级嵌入式数据库:

SQLite特点
零配置
无服务器
单文件存储
事务支持

核心优势

  • 无需单独安装或配置
  • 数据库存储在单个文件中(.db或.db3后缀)
  • 支持标准SQL语法
  • 适用于嵌入式设备和移动应用
  • Qt提供原生支持(无需额外驱动)

⚠️ 使用前需在.pro文件添加:QT += sql


2. Qt数据库核心类

数据库操作双核心类:
类名作用关键方法
QSqlDatabase数据库连接管理addDatabase(), open(), close()
QSqlQuerySQL语句执行和结果集操作exec(), prepare(), next()
QSqlTableModel数据表模型(高级操作)setTable(), select()
QSqlError数据库错误处理text(), type()
类关系图:
QSqlDatabase
QSqlQuery
QSqlError
QSqlRecord
QSqlTableModel

3. 数据库操作全流程

六步完成数据库操作:
AppDatabase1. 添加数据库驱动2. 设置连接参数3. 打开数据库连接4. 执行SQL语句5. 处理结果集6. 关闭连接AppDatabase

4. CRUD操作实战

(1) 创建数据库和数据表
// 添加SQLite驱动
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("contacts.db");  // 数据库文件// 打开数据库
if(!db.open()) {qDebug() << "数据库打开失败:" << db.lastError().text();return;
}// 创建数据表
QSqlQuery query;
query.exec("CREATE TABLE IF NOT EXISTS contacts (""id INTEGER PRIMARY KEY AUTOINCREMENT, ""name TEXT NOT NULL, ""phone TEXT, ""email TEXT)");
(2) 插入数据(Create)
// 准备插入语句
query.prepare("INSERT INTO contacts (name, phone, email) ""VALUES (:name, :phone, :email)");// 绑定值
query.bindValue(":name", "张三");
query.bindValue(":phone", "13800138000");
query.bindValue(":email", "zhangsan@example.com");// 执行插入
if(!query.exec()) {qDebug() << "插入失败:" << query.lastError().text();
}
(3) 查询数据(Read)
query.exec("SELECT * FROM contacts");
while(query.next()) {int id = query.value("id").toInt();QString name = query.value("name").toString();QString phone = query.value("phone").toString();qDebug() << "ID:" << id << "| 姓名:" << name << "| 电话:" << phone;
}
(4) 更新数据(Update)
query.prepare("UPDATE contacts SET phone = :phone WHERE name = :name");
query.bindValue(":phone", "13900139000");
query.bindValue(":name", "张三");
query.exec();
(5) 删除数据(Delete)
query.exec("DELETE FROM contacts WHERE name = '李四'");
(6) 使用模型视图(高级)
QSqlTableModel *model = new QSqlTableModel;
model->setTable("contacts");
model->select();// 在表格视图中显示
QTableView *view = new QTableView;
view->setModel(model);
view->show();

5. 运行效果展示

数据库文件结构:
contacts.db 文件内容:
┌────┬─────────┬──────────────┬──────────────────────┐
│ id │ name    │ phone        │ email                │
├────┼─────────┼──────────────┼──────────────────────┤
│ 1  │ 张三    │ 13900139000  │ zhangsan@example.com │
│ 2  │ 王五    │ 13700137000  │ wangwu@example.com   │
└────┴─────────┴──────────────┴──────────────────────┘
查询结果输出:
ID: 1 | 姓名: 张三 | 电话: 13900139000
ID: 2 | 姓名: 王五 | 电话: 13700137000

完整源码:GitHub数据库示例
官方文档

  • Qt SQL模块
  • SQLite语法参考
    最佳实践
  • 使用事务处理批量操作提升性能
  • 使用参数绑定防止SQL注入攻击
  • 数据库操作放在独立线程避免界面卡顿

原创技术笔记,转载需注明出处。更多系统编程内容持续更新中…

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

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

相关文章

FastAPI 与 OpenIddict 的微服务鉴权整合方案

架构概述基于微服务的身份认证架构采用OAuth 2.0/OpenID Connect协议&#xff0c;OpenIddict作为认证服务器&#xff0c;FastAPI作为资源服务器。系统包含三个核心组件&#xff1a;认证服务、API网关和业务微服务。OpenIddict负责颁发令牌&#xff0c;FastAPI通过JWT验证访问权…

计算两个点的欧式距离

目录 一、概述 二、公式 1、二维空间 2、三维空间 3、n 维空间 三、python实现 一、概述 欧式距离&#xff08;Euclidean Distance&#xff09;是一种在欧几里得空间中度量两个点之间距离的常用方法&#xff0c;其公式根据空间维度的不同而不同 二、公式 1、二维空间 对于二…

八股训练--RabbitMQ

一、经典问题 1.为什么要用MQ&#xff1f; MQ的作用主要是3个&#xff0c; 第一个是流量削峰&#xff1a;当某个活动举行时&#xff0c;访问量可能是平时的几百倍&#xff0c;可能一下会把服务器弄崩溃&#xff0c;所以通过MQ的形式&#xff0c;引入中间者&#xff0c;客户端…

Elasticsearch 文档检索系统

学习笔记&#xff1a;Elasticsearch 文档检索系统 1. 技术栈与核心组件 Node.js&#xff1a;后端运行环境&#xff0c;适合构建高性能 Web 服务。Express&#xff1a;Node.js 的 Web 框架&#xff0c;简化 API 开发。Elasticsearch&#xff1a;分布式全文检索引擎&#xff0c;支…

如何准确查看服务器网络的利用率?

在服务器运维与性能调优过程中&#xff0c;网络利用率是一个不容忽视的关键指标。它反映了服务器带宽资源的实际使用情况&#xff0c;是判断系统瓶颈、规划资源扩展、排查连接问题的重要依据。很多人误以为网络是否正常只要“能上网”或“Ping得通”就可以了&#xff0c;实际上…

掌握Spring声明式事务传播机制:AOP与ThreadLocal的协同工作

声明式事务的传播机制是解决多个事务方法嵌套调用时&#xff0c;事务如何创建、复用、挂起或隔离的核心逻辑。它的实现依赖于事务管理器、事务状态管理、线程上下文绑定等组件的协同&#xff0c;本质是通过一套 “规则判断 状态维护” 的逻辑&#xff0c;在方法调用时动态决定…

@Transactional事务注解的批量回滚机制

关键机制说明&#xff1a;1.​​事务注解生效​​&#xff1a;Transactional(rollbackFor Exception.class)Override Transactional(rollbackFor Exception.class) public Boolean saveUser(UserDTO userDto) {SysUser sysUser new SysUser();BeanUtils.copyProperties(user…

飞算 JavaAI 深度体验:开启 Java 开发智能化新纪元

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 目录 一、引言 二、飞算 JavaAI 初印象与功能概览 &#xff08;一&#xff09;初识飞算 JavaAI &#xff08;二&#xff09;核心功能模块概览 三、智能代码生成功能深度体…

pandas销售数据分析

pandas销售数据分析 数据保存在data目录 消费者数据&#xff1a;customers.csv商品数据&#xff1a;products.csv交易数据&#xff1a;transactions.csv customers.csv数据结构&#xff1a;字段描述customer_id客户IDgender性别age年龄region地区membership_date会员日期produc…

访问Windows服务器备份SQL SERVER数据库

以前没有直接访问过Windows服务器,今天刚一看到的是时候有点懵,竟然下意识的使用SecureCRT远程工具去连了一下,然后领导说,看一下用户名,突然意识到,跟我们平时远程桌面是一样的。 一、 win + R 打开命令窗口 二、 输入 mstsc 三、 输入远程地址 四、点击连接,如果有弹…

C++ 面向对象 - 对象定义方法汇总

C对象定义方法汇总 1. 栈上定义方式 1.1 调用无参构造函数的定义方式 无参构造函数有两种&#xff1a; 默认无参构造函数Demo(){}默认值列表构造函数。Demo():a{1},b{2}{} // 使用初始化列表实现对象定义方式&#xff1a; Demo d; Demo d1{}; // 以下定义方式还调用了拷贝构造…

指尖上的魔法:优雅高效的Linux命令手册

一、Linux基础指令 1. ls ls&#xff1a;对于目录&#xff0c;列出该目录下的所有子目录与文件&#xff0c;对于文件&#xff0c;将列出文件名以及其他信息。 -a&#xff1a;列出目录下的所有文件&#xff0c;包含以.开头的隐藏文件 -l:列出文件的详细信息 -d&#xff1a;将目录…

《磁力下载工具实测:资源搜索+高速下载一站式解决方案》

嘿&#xff0c;朋友们&#xff01;我是阿灿&#xff0c;今天给大家带来一个超实用的看片神器&#xff0c;特别适合老司机们使用&#xff0c;保证让你眼前一亮&#xff01;推荐一款比某雷更好用的下载工具&#xff0c;搭配资源搜索神器&#xff0c;轻松获取资源不限速。超强磁力…

Go网络编程基础:网络模型与协议栈概述 - 从理论到实践的完整指南

1. 引言 在当今的互联网时代&#xff0c;网络编程已经成为后端开发的核心技能。Go语言以其出色的并发性能和简洁的语法&#xff0c;在网络编程领域展现出了强大的优势。从Docker、Kubernetes到众多微服务框架&#xff0c;Go已经成为构建高性能网络应用的首选语言之一。 你是否…

Web攻防-SSTI服务端模版注入利用分类语言引擎数据渲染项目工具挖掘思路

知识点&#xff1a; 1、WEB攻防-SSTI-利用分类&功能点 2、WEB攻防-SSTI-利用项目&挖掘思路 SSTI(Server Side Template Injection) 服务器模板注入, 服务端接收了用户的输入&#xff0c;将其作为 Web 应用模板内容的一部分&#xff0c;在进行目标编译渲染的过程中&…

李沐动手学深度学习Pytorch-v2笔记【07自动求导代码实现】

文章目录前言自动求导实现非标量变量的反向传播分离计算Python控制流的梯度计算前言 关于走动求导的理论知识个人有点难以理解&#xff0c;推荐大家去看https://blog.csdn.net/weixin_42831564/article/details/135658138这篇文章&#xff0c;讲的很好。 自动求导实现 impor…

strchr 与 strstr 函数详解

一.strchr - 字符查找函数1.函数原型char *strchr(const char *str, int c);2.核心功能在字符串中查找特定字符的第一次出现位置3.参数说明参数 类型 说明str const char* 要搜索的字符串c int 要查找的字符&#xff08;自动转换为char&#xff09;4.返回值…

jakes信道模型

Jakes 模型 前面我们介绍了多径信道合成信号可表示为&#xff1a; r(t)Re{∑i0N(t)−1ai(t)u(t−τi(t))ej2πfc(t−τi(t))ϕDi(t)} r(t)Re \left\{\sum_{i0}^{N(t)-1}a_{i}(t)u(t-\tau_{i}(t))e^{j2\pi f_{c}(t-\tau_{i}(t))\phi_{D_{i}}(t)} \right\} r(t)…

JVM类加载机制解析

什么是类加载器&#xff1f; 类加载器是JVM的核心组件之一&#xff0c;负责将Java字节码文件&#xff08;.class文件&#xff09;加载到JVM内存中。由于JVM只能执行二进制字节码&#xff0c;类加载器的作用就是将编译后的.class文件转换为JVM可以理解和执行的格式&#xff0c;使…

用Python和OpenCV从零搭建一个完整的双目视觉系统(二)

本系列文章旨在系统性地阐述如何利用 Python 与 OpenCV 库&#xff0c;从零开始构建一个完整的双目立体视觉系统。 本项目github地址&#xff1a;https://github.com/present-cjn/stereo-vision-python.git 项目架构设计&#xff1a;蓝图、分工与工作流 在上一篇文章中&#…