当前位置: 首页 > news >正文

Qt数据库相关操作

目录

一、前言

二、类与接口介绍

1.连接管理类

2.数据操作类

3.数据模型类

4.其它类

三、主要操作流程

1.示例

2.绑定参数

3.事务操作


  

一、前言

要在Qt中操作数据库,首先要安装对应的数据库,还要确保安装了Qt SQL模块。使用MySQL时,可能还要添加数据库驱动。

可参考下文:

Qt操作数据库详解_qt 数据库-CSDN博客

Qt中编译数据库驱动 | 爱编程的大丙

在使用时要添加模块依赖:QT += sql,以引入Qt SQL模块。


   

二、类与接口介绍

1.连接管理类

QSqlDatabase:用于创建和管理数据库连接。通过调用静态方法addDatabase()创建连接,指定数据库驱动类型和连接名称。

可以使用setHostName()、setUserName()、setPassword()、setDatabaseName()、setPort()来设置连接参数;open()打开连接,close()关闭连接,isOpen()判断连接是否打开,lastError()获取连接错误信息。

   

2.数据操作类

QSqlQuery:用于执行SQL语句并处理结果集。

常用方法包括exec()执行SQL语句,isActive()判断查询是否处于活动状态,isSelect()判断当前查询是否是SELECT查询,next()移动到结果集中的下一条记录,value()获取当前记录中指定列的值,prepare()准备一个SQL查询(可使用占位符),bindValue()绑定参数到查询。

QSqlError:用于表示数据库操作过程中的错误信息。通过QSqlDatabase或QSqlQuery的lastError()方法获取,包含错误代码、错误文本等信息。

   

3.数据模型类

QSqlQueryModel:基于SQL查询的只读模型,用于在视图中显示数据库查询结果。

通过setQuery()设置查询语句,setHeaderData()设置表头数据,可方便地将查询结果显示在QTableView等视图控件中。

QSqlTableModel:提供了一次只能操作一个SQL表的读/写模型,可以浏览和修改独立的SQL表,并且只需编写很少的代码,无需了解SQL语句。

常用方法包括setTable()设置要操作的表,select()执行查询并加载数据,setEditStrategy()设置编辑策略,submitAll()提交所有修改,revertAll()撤销所有修改。

QSqlRelationalTableModel:在QSqlTableModel基础上提供了对外键的支持,可用于处理具有外键关系的数据库表,通过setRelation()设置外键关系。

   

4.其它类

QSqlRecord:用于表示数据库表中的一条记录,包含了记录的字段信息和数据,通过QSqlQuery的record()方法获取。

QSqlField:用于表示数据库表中的一个字段,包含了字段的名称、类型等信息,通过QSqlRecord的field()方法获取。

  


   

三、数据库操作

1.主要流程

  1. 创建数据库连接对象并设置连接参数
  2. 打开数据库连接
  3. 编写并执行SQL语句,对数据库进行一系列增删改查操作
  4. 关闭数据库连接

示例:

//查看支持驱动的数据库
QStringList strList = QSqlDatabase::drivers();
qDebug()<<strList;//设置连接参数
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("test01");//打开数据库
if(db.isOpen())qDebug()<<"connect.";
elseqDebug()<<"error:"<<db.lastError().text();//执行sql语句
QSqlQuery query;
QString sql = "select * from students";
query.exec(sql);
while(query.next()){qDebug()<<query.value("id").toUInt()<<query.value("name").toString()<<query.value("gender").toString()<<query.value("uid").toUInt();
}//关闭数据库
db.close();

   

2.绑定参数

使用绑定参数的方式,向数据库表中增加数据:

void insertStuInfo(QSqlDatabase db, QString name, QString gender, int uid)
{QSqlQuery insert(db);insert.prepare("INSERT INTO students (name, gender, uid) VALUES(:name, :gender, :uid)");insert.bindValue(":name",name);insert.bindValue(":gender",gender);insert.bindValue(":uid",uid);bool res = insert.exec();if(res)qDebug()<<"successful";elseqDebug()<<"error: "<<insert.lastError().text();
}

   

3.事务操作

①开始事务:

在进行一系列数据库操作之前,可以使用QSqlDatabase的transaction()方法开始一个事务。如果事务开始成功,返回true;否则返回false。

②提交或回滚事务:

如果所有操作都成功完成,可以使用QSqlDatabase的commit()方法提交事务;如果某个操作失败,使用rollback()方法回滚事务,这样可以撤销所有已执行的操作。

    QString deleteSql = "DELETE FROM students WHERE name = 'mike'";db.transaction();bool res = query.exec(deleteSql);if(res)db.commit();elsedb.rollback();

http://www.lryc.cn/news/525660.html

相关文章:

  • 2025-01-22 Unity Editor 1 —— MenuItem 入门
  • 解锁C#编程新姿势:Z.ExtensionMethods入门秘籍
  • 不使用 JS 纯 CSS 获取屏幕宽高
  • Node.js NativeAddon 构建工具:node-gyp 安装与配置完全指南
  • 【ARTS】【LeetCode-704】二分查找算法
  • Vue.js 配置路由:基本的路由匹配
  • 鸿蒙(HarmonyOS)Json格式转实体对象(2)
  • 代码随想录 栈与队列 test 6
  • 动手学深度学习2025.1.23
  • 生存网络与mlr3proba
  • C#与AI的共同发展
  • 2000-2020年各省第二产业增加值数据
  • 【MySQL】 库的操作
  • docker 启动镜像命令集合
  • 微信小程序获取位置服务
  • Docker Load后存储的镜像及更改镜像存储目录的方法
  • Langchain本地知识库部署
  • java基础学习——jdbc基础知识详细介绍
  • 联想电脑怎么设置u盘启动_联想电脑设置u盘启动方法(支持新旧机型)
  • C# 解析 HTML 实战指南
  • 光谱相机在智能冰箱的应用原理与优势
  • 编写0号中断的处理程序
  • “““【运用 R 语言里的“predict”函数针对 Cox 模型展开新数据的预测以及推理。】“““
  • 群晖docker获取私有化镜像http: server gave HTTP response to HTTPS client].
  • 使用 C++ 在深度学习中的应用:如何通过 C++20 构建高效神经网络
  • 当 Facebook 窥探隐私:用户的数字权利如何捍卫?
  • Spring MVC中HandlerInterceptor和Filter的区别
  • Android多语言开发自动化生成工具
  • 回首2024,展望2025
  • Android SystemUI——快捷面板的显示(十五)