Qt SQL 核心类说明文档

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 --- 错误信息类

功能:

  • 提供数据库操作的错误信息;
  • 包括错误类型、数据库错误代码、驱动错误描述等;
  • 通常与 QSqlDatabaseQSqlQuery 联合使用。

示例代码:

cpp 复制代码
if (!query.exec()) {
    qDebug() << query.lastError().text();
}

总结

类名 作用 是否支持编辑 用途说明
QSqlDatabase 管理数据库连接 必须类,连接数据库的起点
QSqlQuery 执行 SQL、预处理和遍历结果 执行原始 SQL 语句的主要类
QSqlQueryModel 显示查询结果,只读模型 适用于 SELECT 查询展示
QSqlTableModel 基于表的数据模型,支持增删改查 表格视图编辑的首选模型类
QSqlRelationalTableModel 支持外键关系的增强模型 多表展示(如订单关联客户)
QSqlRecord 表示一行数据记录 单行数据的抽象封装
QSqlField 表示一个字段 字段级访问、设置、元信息操作
QSqlError 提供错误报告信息 调试和错误提示的必要工具
相关推荐
星释36 分钟前
Mac Python 安装依赖出错 error: externally-managed-environment
开发语言·python·macos
小迅先生2 小时前
AI开发 | Web API框架选型-FastAPI
开发语言·python·fastapi
A1-292 小时前
QT之INI、JSON、XML处理
xml·c++·qt·json
五花肉村长2 小时前
Linux-读者写著问题和读写锁
linux·运维·服务器·开发语言·数据库·visualstudio
biubiubiu07062 小时前
windows中JDK切换版本
java·开发语言
ALex_zry3 小时前
Go核心特性与并发编程
开发语言·后端·golang
yuanpan3 小时前
CMake创建C++项目与npm创建nodejs项目异曲同工
开发语言·c++·npm
南瓜胖胖3 小时前
R语言科研编程-柱状图
开发语言·r语言
漫步企鹅4 小时前
【Qt】QImage实战
人工智能·深度学习·qt·计算机视觉·qimage
FAQEW4 小时前
介绍一下什么是反射(面试题详细讲解)
java·开发语言·反射