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

Qt的数据库模块介绍,Qt访问SQLite详细示例

在 Qt 中访问数据库,官方推荐使用 Qt SQL 模块,主要通过 QSqlDatabaseQSqlQueryQSqlTableModel 等类来操作各种数据库(SQLite、MySQL、PostgreSQL、Oracle 等)。
对于轻量级本地存储,SQLite 是最常用的数据库之一,因为它无需独立服务器跨平台零配置

下面详细介绍 访问方式SQLite Demo


1️⃣ Qt 访问数据库的方式

方式特点适用场景
QSqlDatabase + QSqlQuery直接操作 SQL 语句,灵活、通用需要执行复杂 SQL 或自定义查询
QSqlTableModel / QSqlQueryModel模型/视图模式,直接绑定到 UI(如 QTableView)数据表直接展示、增删改查
QSqlRelationalTableModel支持外键关联多表关系操作

👉 SQLite 属于文件型数据库,Qt 内置驱动名为 QSQLITE,只要系统有 SQLite 库即可直接使用。


2️⃣ SQLite 示例 Demo(QSqlDatabase + QSqlQuery)

下面提供一个完整的 Qt Demo,包括创建数据库、建表、插入数据、查询数据

📂 文件结构

假设使用 Qt Creator + Widgets 项目

  • main.cpp

  • mainwindow.h / mainwindow.cpp (可选)

✅ main.cpp

#include <QApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>bool initDatabase()
{// 1. 连接数据库QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("test.db");   // 数据库文件名(自动创建)if (!db.open()) {qDebug() << "无法打开数据库:" << db.lastError().text();return false;}// 2. 创建表QSqlQuery query;QString createSql ="CREATE TABLE IF NOT EXISTS person (""id INTEGER PRIMARY KEY AUTOINCREMENT,""name TEXT,""age INTEGER)";if (!query.exec(createSql)) {qDebug() << "建表失败:" << query.lastError().text();return false;}// 3. 插入数据query.prepare("INSERT INTO person (name, age) VALUES (:name, :age)");query.bindValue(":name", "Alice");query.bindValue(":age", 25);if (!query.exec()) {qDebug() << "插入数据失败:" << query.lastError().text();}query.bindValue(":name", "Bob");query.bindValue(":age", 30);query.exec();// 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 true;
}int main(int argc, char *argv[])
{QApplication a(argc, argv);if (initDatabase()) {qDebug() << "数据库初始化完成";}return a.exec();
}

⚙️ pro 文件配置

确保在 .pro 文件中加入 Qt SQL 模块:

QT += sql

3️⃣ 补充:用 QSqlTableModel 绑定到 UI

如果需要在 QTableView 中直接显示数据:

#include <QSqlTableModel>
#include <QTableView>QSqlTableModel *model = new QSqlTableModel(this);
model->setTable("person");
model->select();  // 查询所有数据QTableView *view = new QTableView;
view->setModel(model);
view->show();

这样可以直接进行增删改查,无需手写 SQL。


💡总结

方式优点缺点
QSqlQuery灵活、可执行任何 SQL 语句需要自己写 SQL
QSqlTableModel快速绑定 UI,适合简单表操作对复杂查询支持不足

👉 推荐方案

  • 简单数据展示QSqlTableModel + QTableView

  • 复杂逻辑/多表查询QSqlQuery


文章转载自:

http://5N2WzuPK.prmbb.cn
http://r5SyiLDo.prmbb.cn
http://z12CXtcy.prmbb.cn
http://f6Se7a0u.prmbb.cn
http://GYr336R8.prmbb.cn
http://PtGWXOMY.prmbb.cn
http://KKAsMgzj.prmbb.cn
http://p25jheS1.prmbb.cn
http://8jWK50Gt.prmbb.cn
http://soepW6vp.prmbb.cn
http://2zf87PRz.prmbb.cn
http://bKCYnuyB.prmbb.cn
http://BKLXO2ud.prmbb.cn
http://eCbeBG3I.prmbb.cn
http://Hy9mDRPj.prmbb.cn
http://ypSRukz4.prmbb.cn
http://JTCcvQjM.prmbb.cn
http://tHbQMNyh.prmbb.cn
http://CKyhmRQi.prmbb.cn
http://v9AkCPo6.prmbb.cn
http://9JZ5Gttc.prmbb.cn
http://P8O5dS2w.prmbb.cn
http://yK2W84QC.prmbb.cn
http://e1b6VVzr.prmbb.cn
http://QoSjDonV.prmbb.cn
http://qdn6HqKd.prmbb.cn
http://4c2aQmfz.prmbb.cn
http://5chO9rJj.prmbb.cn
http://1DAF0RrD.prmbb.cn
http://ChaBeGnM.prmbb.cn
http://www.dtcms.com/a/380178.html

相关文章:

  • 线性预热机制(Linear Warmup):深度学习训练稳定性的关键策略
  • 【Ansible】管理复杂的Play和Playbook知识点
  • 微软图引擎GraphEngine深度解析:分布式内存计算的技术革命
  • TBBT: FunWithFlags靶场渗透
  • Git .gitignore 文件不生效的原因及解决方法
  • Elasticsearch面试精讲 Day 16:索引性能优化策略
  • 开源AI大模型AI智能名片S2B2C商城小程序在互联网族群化中的作用与影响
  • 定制开发开源AI智能名片S2B2C商城小程序在互联网族群化中的作用与影响
  • 《人工智能AI之机器学习基石》系列 第 16 篇:关联规则与数据挖掘——“啤酒与尿布”传奇背后的增长秘密
  • DevExpress中Word Processing Document API学习记录
  • MR智能互动沙盘,让虚拟仿真实训更智能更高效
  • Linux基础命令:文件操作与系统管理
  • 在UniApp跨平台开发中实现相机自定义滤镜的链式处理架构
  • SigNoz分布式追踪新体验:cpolar实现远程微服务监控
  • 嵌入式数据结构笔记三——单向链表下
  • Proxmox VE远程管理虚拟化隐形入口用cpolar实现
  • discuz所有下载版本和升级工具
  • # AI(学习笔记第八课) 使用langchain的embedding models
  • 2025年渗透测试面试题总结-67(题目+回答)
  • 城市二次供水物联网监测管控管理平台御控解决方案:构建全链路智能水务新生态
  • Python Yolo8 物体识别
  • 一款VS Code连接和管理PostgreSQL的扩展插件,支持AI智能辅助和代理模式
  • 数据结构 Part 2
  • 华为云 GaussDB:金融级高可用数据库,为核心业务保驾护航
  • springcloud二-Sentinel2
  • VSCode中的下载VSIX是指什么?
  • VSCode 远程开发连接(glibc<2.28)
  • 公网IP采用自签名证书配置https并消除浏览器不安全告警
  • VSCode创建Python项目和运行py文件
  • 时钟驱动器原理