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 界面中,实现高效的数据展示。
相关推荐
是店小二呀2 小时前
五分钟理解Rust的核心概念:所有权Rust
开发语言·后端·rust
她说人狗殊途2 小时前
存储引擎MySQL
开发语言
自然数e2 小时前
C++多线程【线程管控】之线程转移以及线程数量和ID
开发语言·c++·算法·多线程
Arva .2 小时前
ConcurrentHashMap 的线程安全实现
java·开发语言
东方隐侠安全团队-千里2 小时前
第13节 93年高能所被入侵,开启中国网络安全发展进程
网络·安全·web安全
Dxy12393102162 小时前
Python为什么要使用可迭代对象
开发语言·python
liebe1*12 小时前
第五章 防火墙设备互联
网络·防火墙
q***9943 小时前
PON架构(全光网络)
网络·数据库·架构
任子菲阳3 小时前
学Java第四十五天——斗地主小游戏创作
java·开发语言·windows