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

Qt读写SQLite示例

Qt 中读写数据库,常用的方式是通过 Qt SQL 模块(QtSql),它提供了一个统一的数据库访问接口,支持多种数据库驱动(SQLite、MySQL、PostgreSQL、ODBC 等)。
对于轻量级的嵌入式应用,SQLite 是最常用的数据库,因为它无需安装独立服务,只需要一个数据库文件即可完成数据存储和读写,非常适合 Qt 桌面应用。


✅ Qt 访问数据库的常用方式

方式优点缺点适用场景
QSqlDatabase + QSqlQuery直接操作 SQL 语句,灵活、通用需要手动写 SQL,容易出错对 SQL 熟悉,灵活需求
QSqlTableModel / QSqlRelationalTableModel直接与 Qt Model/View 框架配合,支持表格视图显示只适合简单表格,不便于复杂查询需要与 QTableView 绑定的 UI
QSqlQueryModel支持只读 SQL 查询结果显示不能直接修改数据需要展示查询结果但不修改数据

👉 推荐

  • 如果你只是简单地读写数据库,用 QSqlDatabase + QSqlQuery 方式最灵活。

  • 如果要直接绑定到 QTableView,可以用 QSqlTableModel


💡 示例:Qt 读写 SQLite 数据库

以下示例演示如何使用 QSqlDatabase + QSqlQuery 完成创建数据库、建表、插入数据、查询数据的完整流程。

1️⃣ 工程配置

.pro 文件中加入:

QT += sql

2️⃣ 代码示例 (main.cpp)

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QVariant>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 1. 连接数据库QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("test.db"); // 数据库文件,不存在会自动创建if (!db.open()) {qDebug() << "无法打开数据库:" << db.lastError().text();return -1;}QSqlQuery query;// 2. 创建表if (!query.exec("CREATE TABLE IF NOT EXISTS person (""id INTEGER PRIMARY KEY AUTOINCREMENT,""name TEXT,""age INTEGER)")) {qDebug() << "创建表失败:" << query.lastError().text();}// 3. 插入数据query.prepare("INSERT INTO person (name, age) VALUES (?, ?)");query.addBindValue("Alice");query.addBindValue(25);if (!query.exec())qDebug() << "插入数据失败:" << query.lastError().text();query.addBindValue("Bob");query.addBindValue(30);if (!query.exec())qDebug() << "插入数据失败:" << query.lastError().text();// 4. 查询数据if (query.exec("SELECT id, name, age FROM person")) {while (query.next()) {int id = query.value(0).toInt();QString name = query.value(1).toString();int age = query.value(2).toInt();qDebug() << "ID:" << id << " Name:" << name << " Age:" << age;}} else {qDebug() << "查询失败:" << query.lastError().text();}return 0;
}

🔑 关键点说明

  • 数据库驱动

    • SQLite 驱动名是 QSQLITE,Qt 自带,无需额外安装。

  • 自动创建文件

    • db.setDatabaseName("test.db") 如果文件不存在会自动生成。

  • 参数绑定

    • 使用 query.preparequery.addBindValue 可以避免 SQL 注入问题。


🖼️ 如果需要 UI 表格展示

可以直接在 QTableView 里显示:

QSqlTableModel *model = new QSqlTableModel(this, db);
model->setTable("person");
model->select();
ui->tableView->setModel(model);

总结

  • 最通用QSqlDatabase + QSqlQuery,适合所有读写操作。

  • 快速显示表格QSqlTableModel + QTableView,适合简单的 CRUD 界面。


文章转载自:

http://ObqRELRt.tqsnd.cn
http://lGcQ5LsR.tqsnd.cn
http://FgHb7atf.tqsnd.cn
http://OqsaRsND.tqsnd.cn
http://MMfDNU8L.tqsnd.cn
http://BhWGvFAW.tqsnd.cn
http://IXAIAKH3.tqsnd.cn
http://bIywU0MG.tqsnd.cn
http://u0rbfxx0.tqsnd.cn
http://0gHUGaBS.tqsnd.cn
http://zlkopwro.tqsnd.cn
http://RyTFSXVT.tqsnd.cn
http://KFZaFMPD.tqsnd.cn
http://0cklnNAc.tqsnd.cn
http://h2rWjnZF.tqsnd.cn
http://jEuYUzz7.tqsnd.cn
http://ohlMbenM.tqsnd.cn
http://BIrbWZGs.tqsnd.cn
http://siK0kCPF.tqsnd.cn
http://2GxNRFVO.tqsnd.cn
http://xcpYANc8.tqsnd.cn
http://uWtWweSm.tqsnd.cn
http://x2BUvl4p.tqsnd.cn
http://8f60SWqS.tqsnd.cn
http://umBLQk0J.tqsnd.cn
http://vQsYmBGa.tqsnd.cn
http://u85be92X.tqsnd.cn
http://edTiCpst.tqsnd.cn
http://MzMLrGNv.tqsnd.cn
http://jmO5gTzE.tqsnd.cn
http://www.dtcms.com/a/386422.html

相关文章:

  • Jmeter性能测试之阶梯式场景、波浪式场景、服务器监控
  • 黄昏时刻复古胶片风格人像风光摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • Django ORM多对多关系实战指南
  • 【从零开始java学习|第十七篇】面向对象进阶
  • Three.js 开发实战教程(一):环境搭建与第一个 3D 场景
  • 旅游小程序的功能优势
  • LeetCode:7.接雨水
  • Android 安卓 问题解决记录 腾讯IM和厂商离线推送问题 点击离线推送无法唤醒APP启动页但某些Service服务和Application被启动
  • 动态规划解决系列子序列问题
  • SCADE One vs Scade 6 - 标量积建模比较
  • Next.js 身份验证与授权:使用 NextAuth.js 保护你的应用
  • Spring MVC 的案例小练习
  • 贪心算法与动态规划
  • 香港期权市场的主要参与者有哪些?
  • 系统中间件与云虚拟化-serverless-基于阿里云函数计算的简单邮件发送服务设计与体验
  • 【LLM】GPT-OSS架构变化详解
  • 【开题答辩全过程】以 “寄情绿苑”绿色殡葬服务小程序的设计和实现为例,包含答辩的问题和答案
  • 容器化部署之dockerfile07
  • 一篇读懂Pormise!!【前端ES6】
  • spring-kafka的消息过滤器RecordFilterStrategy
  • gin中sse流式服务
  • 论文笔记(九十一)GWM: Towards Scalable Gaussian World Models for Robotic Manipulation
  • Simulink(MATLAB)与 LabVIEW应用对比
  • [BX]和loop指令,debug和masm汇编编译器对指令的不同处理,循环,大小寄存器的包含关系,操作数据长度与寄存器的关系,段前缀
  • Django RBAC权限实战全流程
  • 智启燃气新未来丨众智鸿图精彩亮相2025燃气运营与安全研讨会
  • Docker Push 常见报错及解决方案汇总
  • OCR 后结构化处理最佳实践
  • 软考 系统架构设计师系列知识点之杂项集萃(148)
  • P1425 小鱼的游泳时间