Qt SQL 核心类说明文档
Qt 的 SQL 模块通过一组 QSql
前缀的核心类,为多种数据库系统提供统一的数据访问接口。该模块支持常见数据库(如 SQLite、MySQL、PostgreSQL 等),并结合 Qt 的 MVC 框架,方便地将数据与界面视图集成。
一、QSqlDatabase --- 数据库连接管理类
功能:
- 管理数据库连接对象;
- 设置数据库驱动、主机、端口、用户名、密码等参数;
- 打开和关闭数据库连接;
- 支持多个连接实例(通过连接名称区分)。
示例代码:
cpp
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("example.db");
if (!db.open()) {
qDebug() << "Database connection failed:" << db.lastError().text();
}
二、QSqlQuery --- SQL 执行与结果遍历类
功能:
- 执行 SQL 语句;
- 支持预处理语句和绑定参数;
- 遍历查询结果;
- 可获取最后插入的主键 ID。
示例代码:
cpp
QSqlQuery query;
query.prepare("INSERT INTO users (name, age) VALUES (?, ?)");
query.addBindValue("Alice");
query.addBindValue(30);
if (!query.exec()) {
qDebug() << "Insert failed:" << query.lastError().text();
}
三、QSqlQueryModel --- 只读数据模型类
功能:
- 基于 SQL 查询结果的只读模型;
- 可直接绑定到 QTableView 显示;
- 不支持修改数据。
示例代码:
cpp
QSqlQueryModel *model = new QSqlQueryModel;
model->setQuery("SELECT name, age FROM users");
tableView->setModel(model);
四、QSqlTableModel --- 可编辑数据模型类
功能:
- 基于数据库表的可编辑模型;
- 支持行插入、删除、修改;
- 支持排序、过滤;
- 可绑定 QTableView 实现数据可视化编辑。
示例代码:
cpp
QSqlTableModel *model = new QSqlTableModel;
model->setTable("users");
model->setEditStrategy(QSqlTableModel::OnFieldChange); // 立即保存修改
model->select();
tableView->setModel(model);
五、QSqlRelationalTableModel --- 关系型数据模型类
功能:
QSqlTableModel
的扩展;- 支持表与表之间的外键关系;
- 可用外键字段的可读名称替代 ID 显示在视图中。
示例代码:
cpp
QSqlRelationalTableModel *model = new QSqlRelationalTableModel;
model->setTable("orders");
model->setRelation(1, QSqlRelation("customers", "id", "name")); // 第1列外键关联
model->select();
六、QSqlRecord --- 数据行对象
功能:
- 表示查询结果或数据表的一行;
- 支持按字段名或索引访问字段值;
- 可用于读取或构造数据行。
示例代码:
cpp
QSqlRecord record = model->record(0); // 第一行
QString name = record.value("name").toString();
七、QSqlField --- 数据字段对象
功能:
- 表示单个字段;
- 包含字段名、数据类型、值、是否为空等属性;
- 可用于设置和读取字段值。
八、QSqlError --- 错误信息类
功能:
- 提供数据库操作的错误信息;
- 包括错误类型、数据库错误代码、驱动错误描述等;
- 通常与
QSqlDatabase
、QSqlQuery
联合使用。
示例代码:
cpp
if (!query.exec()) {
qDebug() << query.lastError().text();
}
总结
类名 | 作用 | 是否支持编辑 | 用途说明 |
---|---|---|---|
QSqlDatabase | 管理数据库连接 | 否 | 必须类,连接数据库的起点 |
QSqlQuery | 执行 SQL、预处理和遍历结果 | 否 | 执行原始 SQL 语句的主要类 |
QSqlQueryModel | 显示查询结果,只读模型 | 否 | 适用于 SELECT 查询展示 |
QSqlTableModel | 基于表的数据模型,支持增删改查 | 是 | 表格视图编辑的首选模型类 |
QSqlRelationalTableModel | 支持外键关系的增强模型 | 是 | 多表展示(如订单关联客户) |
QSqlRecord | 表示一行数据记录 | 是 | 单行数据的抽象封装 |
QSqlField | 表示一个字段 | 是 | 字段级访问、设置、元信息操作 |
QSqlError | 提供错误报告信息 | 否 | 调试和错误提示的必要工具 |