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 界面中,实现高效的数据展示。
相关推荐
Quz3 天前
QML Hello World 入门示例
qt
xcyxiner6 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner7 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner7 天前
DicomViewer (添加模型类)3
qt
xcyxiner8 天前
DicomViewer (目录调整) 2
qt
xcyxiner8 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00610 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术10 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园10 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob10 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio