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 界面中,实现高效的数据展示。
相关推荐
Scott9999HH8 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社9 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海9 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖10 小时前
JDK 26 新特性详解
java·开发语言
马优晨11 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
andxe11 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信
shiyi.十一12 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
DFT计算杂谈12 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
水境传感 李兆栋12 小时前
GNSS 位移监测站 :毫米级感知,筑牢安全监测防线
网络
人邮异步社区13 小时前
怎么把C语言学到精通?
c语言·开发语言