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 提供错误报告信息 调试和错误提示的必要工具
相关推荐
先知后行。13 分钟前
QT实现计算器
开发语言·qt
掘根14 分钟前
【Qt】常用控件3——显示类控件
开发语言·数据库·qt
GUIQU.20 分钟前
【QT】嵌入式开发:从零开始,让硬件“活”起来的魔法之旅
java·数据库·c++·qt
西阳未落4 小时前
C++基础(21)——内存管理
开发语言·c++·面试
我的xiaodoujiao4 小时前
Windows系统Web UI自动化测试学习系列2--环境搭建--Python-PyCharm-Selenium
开发语言·python·测试工具
callJJ4 小时前
从 0 开始理解 Spring 的核心思想 —— IoC 和 DI(2)
java·开发语言·后端·spring·ioc·di
hsjkdhs6 小时前
万字详解C++之构造函数析构函数
开发语言·c++
Lin_Aries_04216 小时前
容器化简单的 Java 应用程序
java·linux·运维·开发语言·docker·容器·rpc
techdashen7 小时前
12分钟讲解Python核心理念
开发语言·python
山海不说话7 小时前
Java后端面经(八股——Redis)
java·开发语言·redis