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 界面中,实现高效的数据展示。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值