当前位置: 首页 > ds >正文

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

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.xdnf.cn/news/15300.html

相关文章:

  • 解决Linux绑定失败地址已使用(端口被占用)的问题
  • 设计仿真 | MSC Apex Simufact实现铁路铰链轻量化与高精度增材制造
  • 在 Spring Boot 中优化长轮询(Long Polling)连接频繁建立销毁问题
  • MySQL:分析表锁的常见问题
  • JavaScript加强篇——第四章 日期对象与DOM节点(基础)
  • P9755 [CSP-S 2023] 种树
  • 【JavaScript高级】构造函数、原型链与数据处理
  • OS16.【Linux】冯依诺曼体系结构和操作系统的浅层理解
  • docker-compose安装常用中间件
  • 【unitrix】 4.21 类型级二进制数基本结构体(types.rs)
  • 1965–2022年中国大陆高分辨率分部门用水数据集,包含:灌溉用水、工业制造用水、生活用水和火电冷却
  • C语言的程序控制语句
  • VR协作海外云:跨国企业沉浸式办公解决方案
  • 决策树算法在医学影像诊断中的广泛应用
  • ch07 题解
  • 番外-linux系统运行.net framework 4.0的项目
  • [特殊字符]远程服务器配置pytorch环境
  • 设计模式笔记_结构型_代理模式
  • 基于vscode开发工具显示git提交信息的插件
  • 世界现存燃油汽车品牌起源国别梳理
  • 【实时Linux实战系列】硬实时与软实时设计模式
  • 【网络】Linux 内核优化实战 - net.netfilter.nf_conntrack_max
  • 基于开源AI智能名片链动2+1模式与S2B2C商城小程序的渠道选择策略研究
  • BPE(Byte Pair Encoding)分词算法
  • flutter鸿蒙版 环境配置
  • 在前端项目中是如何解决跨域的
  • 解决Vue页面黑底红字遮罩层报错:Unknown promise rejection reason (webpack-internal)
  • CSP-J/S 参赛选手注册报名流程
  • 智能文本抽取在合同管理实战应用
  • AIC8800M40低功耗wifi在ARM-LINUX开发板上做OTA的调试经验