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

Qt操作SQLite数据库教程

Qt 中操作 SQLite 数据库的步骤如下:

1. 添加 SQLite 驱动并打开数据库

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>// 创建数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mydatabase.db"); // 可以是绝对路径或相对路径if (!db.open()) {qDebug() << "Error opening database:" << db.lastError().text();return;
}

2. 执行 SQL 语句

创建表
QSqlQuery query;
if (!query.exec("CREATE TABLE IF NOT EXISTS users (""id INTEGER PRIMARY KEY AUTOINCREMENT,""name TEXT NOT NULL,""age INTEGER)")) {qDebug() << "Create table error:" << query.lastError().text();
}
插入数据(两种方式)
// 方式1:直接执行 SQL
query.exec("INSERT INTO users (name, age) VALUES ('Alice', 25)");// 方式2:参数化查询(推荐)
query.prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
query.bindValue(":name", "Bob");
query.bindValue(":age", 30);
query.exec();
批量插入(使用事务)
db.transaction();
QSqlQuery batchQuery;
batchQuery.prepare("INSERT INTO users (name) VALUES (?)");for (const QString &name : {"Tom", "Jerry", "Mike"}) {batchQuery.addBindValue(name);batchQuery.exec();
}
db.commit();

3. 查询数据

QSqlQuery selectQuery("SELECT id, name, age FROM users");
while (selectQuery.next()) {int id = selectQuery.value(0).toInt();QString name = selectQuery.value("name").toString();int age = selectQuery.value(2).toInt();qDebug() << id << name << age;
}

4. 使用模型视图(示例)

#include <QSqlTableModel>
#include <QTableView>// 创建模型
QSqlTableModel *model = new QSqlTableModel;
model->setTable("users");
model->select();// 显示数据
QTableView *view = new QTableView;
view->setModel(model);
view->show();

5. 关闭数据库

db.close();

注意事项:

  1. SQLite 驱动默认包含在 Qt 中,不需要额外配置
  2. 数据库文件会被创建在程序的工作目录(除非指定绝对路径)
  3. 使用参数化查询可防止 SQL 注入
  4. 重要操作建议使用事务(BEGIN TRANSACTION/COMMIT)
  5. 错误检查推荐使用 lastError() 方法

常见错误处理:

if (query.lastError().isValid()) {qDebug() << "SQL Error:" << query.lastError().text();qDebug() << "Executed SQL:" << query.lastQuery();
}

完整示例代码可参考 Qt 官方文档:https://doc.qt.io/qt-5/sql-example.html

建议结合 Qt 的信号槽机制和 Model/View 架构实现数据库应用的高效开发。

http://www.dtcms.com/a/191181.html

相关文章:

  • AI Agent开发第66课-彻底消除RAG知识库幻觉-带推理的RAG
  • 3D Gaussian Splatting 查看工具 splatviz
  • 建筑物渗水漏水痕迹发霉潮湿分割数据集labelme格式1357张1类别
  • vue和springboot交互数据,使用axios【跨域问题】
  • 论系统安全架构设计及其应用~系统架构师论文
  • Ros2 - Moveit2 - DeepGrasp(深度抓握)
  • Open3D 体素化下采样
  • Python面向对象编程精解:从两大编程范式到类与对象实战
  • 前后端分离博客 Weblog 项目实战
  • 启动窗体自动输入上次内容——CAD c#二次开发
  • 50. Pow(x, n)
  • 『 测试 』软件测试全流程与Bug管理核心要点解析
  • 前端~三维地图(cesium)动态材质扩散圆环
  • 编译openssl源码
  • LLM定制新路径:微调与上下文学习的博弈与融合
  • JS中本地存储(LocalStorage)和会话存储(sessionStorage)的使用和区别
  • python使用matplotlib画图
  • 交易所功能设计的核心架构与创新实践
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(21):复习
  • 一般枚举题目合集
  • 【HALCON】 HALCON 教程:正确使用 `get_dict_tuple` 获取字典内容
  • gd32e230c8t6 keil6工程模板
  • loss = -F.log_softmax(logits[:, -1, :], dim=1)[0, irrational_id]
  • 快消零售AI转型:R²AIN SUITE如何破解效率困局
  • CK-S654-PA60一拖四分体式半导体电子货架专用RFID读写器|读码器接线使用说明
  • java day 11
  • acwing 1488. 最短距离 超级源点 最短路 堆优化Dijkstra
  • 03_朴素贝叶斯分类
  • The 2022 ICPC Asia Xian Regional Contest(E,L)题解
  • 鸿蒙:DevEco Studio配置ohpm时,cmd正常,在终端出现‘ohpm‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。