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 提供错误报告信息 调试和错误提示的必要工具
相关推荐
Edingbrugh.南空31 分钟前
Hive SQL执行流程深度解析:从CLI入口到执行计划生成
hive·hadoop·sql
CPETW1 小时前
同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——C
c语言·开发语言·科技·stm32·单片机·嵌入式硬件·电子
代码中の快捷键1 小时前
如何实现一个登录功能?
java·开发语言
虾球xz1 小时前
CppCon 2015 学习:C++ devirtualization in clang
开发语言·c++·学习
看到我,请让我去学习2 小时前
C++核心编程(动态类型转换,STL,Lanmda)
c语言·开发语言·c++·stl
conkl2 小时前
Apache网页优化实战指南 - 让网站加载速度提升
linux·运维·服务器·开发语言·阿里云·apache
onlooker66662 小时前
Go语言底层(五): 深入浅出Go语言的ants协程池
开发语言·后端·golang
刚子编程2 小时前
C# WinForms 实现打印监听组件
开发语言·c#·winform·打印监听组件
泽02022 小时前
C++之模板进阶
开发语言·c++·算法
武子康2 小时前
Java-46 深入浅出 Tomcat 核心架构 Catalina 容器全解析 启动流程 线程机制
java·开发语言·spring boot·后端·spring·架构·tomcat