Qt Sql 模块中的函数详解

Qt Sql 模块是 Qt 框架中用于数据库访问的库。它的主要目标是提供一个独立于具体数据库系统的统一 API。

Qt Sql 模块的功能主要围绕三个核心任务:连接数据库、执行查询 ,以及将查询结果集成到 Qt 的模型/视图框架中。


🌟 Qt Sql 模块核心功能及其函数详解

1. 📂 数据库连接和管理 (QSqlDatabase)

QSqlDatabase 类用于创建、管理和释放与数据库的连接。它是访问任何数据库的第一步。

核心函数 (Function) 作用描述 示例用法
addDatabase() 添加数据库连接。 静态函数。指定数据库驱动(如 "QSQLITE", "QMYSQL")和连接名称。 QSqlDatabase::addDatabase("QSQLITE", "my_conn");
setDatabaseName() 设置数据库文件/名称。 对于 SQLite,这是数据库文件的路径;对于服务器,这是数据库名称。 db.setDatabaseName("data.db");
setHostName() / setPort() 设置连接参数。 用于连接到远程数据库服务器(如 MySQL, PostgreSQL)。 db.setHostName("localhost");
setUserName() / setPassword() 设置身份验证信息。 用于登录数据库。 db.setUserName("user");
open() 建立连接。 尝试使用配置好的参数建立到数据库的实际连接。 if (!db.open()) { ... }
close() 断开连接。 关闭数据库连接并释放资源。 db.close();
database() 获取连接对象。 静态函数,通过连接名称获取已添加的连接实例。 QSqlDatabase db = QSqlDatabase::database("my_conn");
isValid() 检查连接有效性。 检查对象是否代表一个有效的、已配置的数据库连接。 if (db.isValid()) { ... }
tables() 获取表列表。 返回当前数据库中所有表的名称列表 (QStringList)。 QStringList list = db.tables();
transaction() / commit() / rollback() 事务管理。 用于启动、提交或回滚一组 SQL 操作,确保数据完整性。 db.transaction(); if (error) db.rollback(); else db.commit();

2. 📝 SQL 查询执行 (QSqlQuery)

QSqlQuery 类用于执行 SQL 语句、遍历查询结果、以及进行数据绑定。

核心函数 (Function) 作用描述 示例用法
QSqlQuery() 构造函数。 创建一个用于执行查询的对象,通常与一个 QSqlDatabase 连接关联。 QSqlQuery query(db);
exec() 执行查询。 执行 SQL 语句。对于 SELECT 语句,返回 true 表示查询成功。 query.exec("SELECT * FROM users");
next() 前进到下一条记录。 用于遍历查询结果集。必须在 exec() 之后调用。 while (query.next()) { ... }
value() 获取当前字段的值。 通过字段的索引或名称获取当前记录中某个字段的数据。 QVariant name = query.value("name");
prepare() 准备查询语句。 用于预编译带占位符的 SQL 语句,防止 SQL 注入。 query.prepare("INSERT INTO users (name) VALUES (?)");
bindValue() 绑定占位符的值。 将实际数据绑定到 prepare() 语句中的占位符。 query.bindValue(0, "Alice");
lastError() 获取错误信息。 返回查询执行失败时的详细错误信息对象。 qDebug() << query.lastError().text();

3. 📊 模型/视图集成 (QSqlTableModel, QSqlQueryModel)

这些类将 SQL 查询结果作为 模型 暴露给 Qt 的 视图 控件(如 QTableView),实现数据显示和编辑的自动化。

A. QSqlQueryModel (只读模型)
核心函数 (Function) 作用描述 示例用法
setQuery() 设置查询语句。 使用一个 SELECT 语句作为数据源。该模型是只读的。 model.setQuery("SELECT id, name FROM employees");
setHeaderData() 设置列标题。 更改视图中显示的列标题文本。 model.setHeaderData(0, Qt::Horizontal, "Employee ID");
B. QSqlTableModel (可读写模型)
核心函数 (Function) 作用描述 示例用法
setTable() 设置数据源表。 将模型绑定到数据库中的一个特定表。 model.setTable("employees");
select() 填充模型数据。 执行 SELECT 操作,从绑定表中加载数据。 model.select();
setFilter() 设置过滤条件。 应用 SQL WHERE 子句来过滤显示的数据。 model.setFilter("salary > 50000");
setEditStrategy() 设置编辑策略。 决定何时将更改写入数据库(如 QSqlTableModel::OnManualSubmit)。 model.setEditStrategy(QSqlTableModel::OnFieldChange);
submitAll() / revertAll() 提交/撤销更改。 将模型中缓存的修改批量提交到数据库,或撤销所有未提交的修改。 model.submitAll();

总结:

Qt Sql 模块通过这三个核心类实现了完整的数据库操作流程:

  1. QSqlDatabase 配置和连接数据库。
  2. QSqlQuery 执行自定义的 SQL 语句和遍历结果。
  3. QSqlTableModel / QSqlQueryModel 将数据库数据集成到 GUI 界面中,实现高效的数据展示。
相关推荐
草履虫君41 分钟前
VMware 虚拟机网络性能优化指南:从 11 秒到 4 秒的完整调优实践
服务器·网络·经验分享·性能优化
We་ct42 分钟前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
skywalk81631 小时前
在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,这样像很多计算将更加简单方便,就像现在的小学数学课本里面一样,比如:定x=2*x + 1
开发语言
@insist1231 小时前
信息安全-防火墙技术演进全景:从代理NAT 到下一代及专项防火墙
网络·安全·web安全·软考·信息安全工程师·软件水平考试
小书房1 小时前
Kotlin的by
android·开发语言·kotlin·委托·by
优化Henry1 小时前
TDD-LTE站点Rilink=3链路故障处理案例---BBU侧C口“有发光、无收光”的排查与恢复
运维·网络·信息与通信·tdd
浪客灿心1 小时前
Linux网络传输层协议
linux·运维·网络
就叫飞六吧1 小时前
QT写一个桌面程序exe并动态打包基本流程(c++)
开发语言·c++
threelab1 小时前
Three.js 代码云效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能
V搜xhliang02461 小时前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化