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 提供错误报告信息 调试和错误提示的必要工具
相关推荐
molunnnn1 小时前
第四章 Agent的几种经典范式
开发语言·python
洛_尘2 小时前
JAVA EE初阶 2: 多线程-初阶
java·开发语言
百***17072 小时前
Oracle分页sql
数据库·sql·oracle
@卞3 小时前
C语言常见概念
c语言·开发语言
wjs20243 小时前
Eclipse 关闭项目详解
开发语言
沐知全栈开发3 小时前
《隐藏(Hide)》
开发语言
lkbhua莱克瓦243 小时前
Java基础——方法
java·开发语言·笔记·github·学习方法
catchadmin3 小时前
PHP 依赖管理器 Composer 2.9 发布
开发语言·php·composer
范纹杉想快点毕业4 小时前
《嵌入式开发硬核指南:91问一次讲透底层到架构》
java·开发语言·数据库·单片机·嵌入式硬件·mongodb
毕设源码-邱学长4 小时前
【开题答辩全过程】以 基于Python的Bilibili平台数据分析与可视化实现为例,包含答辩的问题和答案
开发语言·python·数据分析