当前位置: 首页 > 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
#include
#include
#include
#include
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
#include
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://www.gsyq.cn/news/11022.html

相关文章:

  • React自定义同步状态Hook - 详解
  • SpringBootMVC相关内容
  • 小柏实战学习Liunx(图文教程三十五)
  • HarmonyOS 5 通知与语音能力开发实战:从消息推送到智能语音交互
  • Keithley 万用表里测电阻分成两种模式
  • 实战:基于HarmonyOS 5构建分布式聊天通讯应用
  • HarmonyOS 5 高级动效实战:粒子系统、路径动画与物理动效开发
  • 全新 CloudPilot AI:嵌入 Kubernetes 的 SRE Agent,降本与韧性双提升!
  • HarmonyOS 5 性能优化全攻略:从启动加速到内存管理
  • HarmonyOS 5 网络编程与数据存储实战:从RESTful API到本地持久化
  • 浅谈当前时代下大学生的就业择业及人生规划
  • flink不同环境切换 - --
  • ps-填充色
  • PythonStudio_圆的面积demo源代码
  • HT-AD4PS-1+ 一分四射频功分器:1-500 MHz 小尺寸/低插损,通信、医疗全能打
  • HarmonyOS资源管理与访问:多分辨率与多语言适配
  • 面试官:为什么没有虚拟线程池?
  • 从安装到中文界面,一文带你玩转 DaVinci Resolve 20(零基础也能搞定)
  • linux手动安装阿里云Logtail采集Nginx访问日志
  • 古代史
  • HarmonyOS 5.0+ 安全加密与数据存储最佳实践指南
  • EV论文修改工作
  • B端界面设计的核心逻辑:效率优先还是体验优先?
  • 质数(埃氏筛、欧拉筛)
  • HarmonyOS数据持久化:Preferences轻量级存储实战
  • 有理数类的问题回答
  • 案例分享 | 芯片企业官网优化
  • Kali Linux 2025.3 发布 (Vagrant Nexmon) - 领先的渗透测试发行版
  • C语言多线程同步详解:从互斥锁到条件变量
  • LazyForEach性能优化:解决长列表卡顿问题