Qt 连接、操作数据库(增删改查)

2023-11-05

Qt 5.9连接MySQL5.7(32/64位)

  • MySQL5.7安装好后将其安装路径lib下 libmysql.dlllibmysqld.dll 两个动态链接库文件复制到Qt 相应编译环境(我用的mingw53_32)安装目录bin下即可

  • 注:因为QT的mingw编译器是32位的,如果安装的MySQL是64位的话需将上面那个libmysql.dll替换为此libmysql.dll ( 提取码:m9iz)

  • 远程连接数据库配置:需关闭防火墙、停用开机密码,然后用命令提示符进入数据库执行以下SQL语句即可(如何执行?

    use mysql;
    grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
    
  • 测试

    #.pro
    QT  += sql widgets
    
    //.cpp
    #include "mainwindow.h"
    #include <QApplication>
    #include <QtSql/QSqlDatabase>
    #include <QSqlQuery>
    #include <QDebug>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("127.0.0.1"); //此为本地连接,可设主机IP
        db.setPort(3306);
        db.setDatabaseName("cpp_info"); //数据库名
        db.setUserName("root");
        db.setPassword("******"); //数据库密码
        if(db.open())
        {
            qDebug()<<"数据库连接成功!!!";
        }
        
    	/*操作数据库*/
    	
        return a.exec();
    }
    

操作数据库(QSqlQuery类)

执行SQL语句(查)

  • 以查询为例
    	QSqlQuery query(db); //此处db对象为上文使用QSqlDatabase类连接MySQL所创建
    	query.exec("select * from data"); //查询data表
    

浏览结果集方法

  • 执行完exec()后,QSqlQuery的内部指针将位于第一条记录前面的位置(需调用一次next()函数将指针指向下一条也就是第一条记录)
    	//查询data表后
        //定位到
        query.next(); //下一条记录索引,如果下一条记录不存在时则返回false,以下函数同理不存在返回false
        query.previous(); //上一条
        query.first(); //第一条
        query.seek(index); //第index条
        query.last(); //最后一条
        
        //记录
        query.record(); //返回当前指向的记录
        query.at(); //返回当前记录的索引
        query.size(); //返回结果集的总条数
        
        //字段
        query.value(n); //返回当前内部指针指向的记录的一个字段值,索引(n)从0开始  
    

增、删、改

  • 直接增加(插入)

    	//方法一
        query.exec("insert into data(account,password) values('user', 'xxxxxx')");
    
  • 使用占位符(名称绑定、位置绑定)

    	//方法二(名称绑定) 
        QString account = "user", password = "xxxxxx";
        query.prepare("insert into data(account,password) values(:account, :password)");    
        query.bindValue(":account", account);
        query.bindValue(":password", password);
        query.exec(); //执行
    	
    	//方法三(位置绑定)
        QString account = "user", password = "xxxxxx";
        query.prepare("insert into data(account,password) values(?, ?)");
        query.addBindValue(account);
        query.addBindValue(password);
        query.exec(); //执行
    
  • 增加多条记录(方法一、二皆可)

        QVariantList account_list, password_list; //创建两个可以存储任意类型的列表对象
        account_list << "user_1" << "user_2";
        password_list << "111111" << "222222";
        
    	//方法一:名称绑定
        query.prepare("insert into data(account,password) values(:account, :password)");
        query.bindValue(":account", account_list);
        query.bindValue(":password", password_list);
        
    	//方法二:位置绑定
        query.prepare("insert into data(account,password) values(?, ?)");
        query.addBindValue(account_list);
        query.addBindValue(password_list);
        
        query.execBatch(); //批处理执行,若出错返回false,可用lastError()返回错误信息,需#include<QSqlError> 
    
    
  • 删除

    	query.exec("delete from data where account = 'user'"); //删除user所对应的记录
    
  • 修改(更新)

    	query.exec("update data set account = 'user_new' where account = 'user'");
    
  • 注:删除和修改亦可使用占位符,和增加类似,就不做介绍了

事务

事务可以保证复杂操作的原子性,即对于一个数据库操作序列,这些操作要么全部做完,要么一条也不做,它是一个不可分割的工作单位,流程如下

  • 使用QSqlDatabase::transaction() 来启动一个事务(必须在创建QSqlQuery的对象以前使用)
  • 使用QSqlQuery类执行SQL语句
  • 调用QSqlDatabase::rollback() 回滚 或是 调用QSqlDatabase::commit() 提交事务

参考书籍:Qt Creator快速入门(第三版)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 连接、操作数据库(增删改查) 的相关文章

  • QWebSocketServer - 不释放内存

    首先 我在安全 websocket 服务器应用程序上运行 valgrind 并发现了一个问题 在 Qt Memcheck 中我必须检查 外部错误 看到它 一些字节是肯定输了 指着我的main就在我的地方QCoreApplication ex
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask
  • 如何在 Qt simple 上解密/加密某些字符串(例如密码)

    这是我得到的 Qt SDK版本4 6 2 视窗XP 问题 我怎样才能简单地加密和简单地加密QString价值 我需要它能够将一些加密的字符串保存到 INI 文件中 并在重新打开应用程序后将字符串加密为正常的密码字符串值 PS 我正在寻找简单
  • QObject多重继承

    我正在尝试在 C Qt 类中使用 mix 来提供一大堆具有通用接口的小部件 该接口是以这样的方式定义的 如果它被定义为其他小部件类的基类 那么小部件本身将具有这些信号 class SignalInterface public QObject
  • 将 C++ 代码(本机客户端)移植到浏览器(Web 应用程序)

    我有一个使用 Qt creator SDK 编写的 C 模块 我想将此代码移植到任何网页上运行 而不会对最终用户损害源代码 用户应该能够在任何浏览器 Chrome Firefox Safari Explorer 上看到此模块的输出 而无需安
  • Android 版 Qt 和 BoringSSL

    我正在开发一个基于 Qt 的 Android 应用程序 它使用 QSslSocket 下载数据 由于 Android 从 OpenSSL 转向 BoringSSL 因为依赖 OpenSSL 库的 Marshmallow Qt 程序在 And
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • MSVC C4100:“应用程序”:未引用的形式参数警告

    使用 MSVC 编译时 以下代码会生成 C4100 警告 这怎么可能 显然引用了 应用程序 class ApplicationInfo public QObject Q OBJECT public static void initializ
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • 如何通过信号和槽传递参数?

    我的 GUI 包括LineEdit and a 按钮 当 的时候按钮单击后 插槽clicked 叫做 我想在之间建立信号槽关系clicked 作为信号和doSomething 作为插槽 问题是doSomething 无权访问 UI 并且do
  • 如何从键盘为 QTableWidget 创建信号?

    我有一张桌子 可以通过左 右 上 下按钮在里面移动 现在 当我停留在某个单元格并按空格键时 我需要创建一个信号 该信号还应该带来该单元格的坐标 我尝试使用 QTableWidget 的标准信号 但它不起作用 我该如何解决这个问题 创建一个单
  • Qt:关闭期间线程仍在运行时 qthread 被销毁

    我有一堂课 class centralDataPool public QObject Q OBJECT public centralDataPool QObject parent 0 centralDataPool commMonitor
  • Qt QML MenuItem iconSource不显示

    我有一个非常简单的设置只是为了说明问题 import QtQuick Controls 1 4 import QtQuick Window 2 2 ApplicationWindow visible true width 640 heigh
  • Qmake 不支持源目录下的构建目录

    我创建了一个可以在 OS X 上编译和运行的应用程序 我现在想开始让它在 Windows 上运行 首先 我将项目复制到 Windows 机器上并尝试编译 但收到此错误 警告 Qmake不支持源目录下的构建目录 有任何想法吗 将影子构建目录设
  • Qt:关闭模式对话框关闭程序

    在我的 Qt 程序中 我有 2 个窗口 主窗口和子窗口 在程序中 一次仅显示这些窗口之一 主窗口有一个插槽 用于创建模式对话框 现在 假设子窗口中单击按钮的信号被发送到该插槽 在这种情况下 主窗口隐藏 子窗口可见 对话框显示得很好 但是当对
  • 渲染具有透明度的纹理时,OpenGL 不需要的像素

    我已经为这个问题苦苦挣扎了一段时间了 当我使用 OpenGL 渲染 2D 纹理 在无透明度和部分透明度之间的过渡上具有透明度值 时 我得到了一些烦人的灰色像素 我认为这是像素值插值的产物 关于如何改进这一点有什么想法吗 I m attach
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • QListWidget 拖放项目从 Symbian 列表中消失

    我在实现带有可通过拖放重新排序的自定义项的 QListWidget 时遇到问题 问题是当我在某个项目上快速双击 非常短的拖放 时 该项目有时会从 QListWidget 中消失 这是我的小部件的构造函数 ListPopisiDragDrop
  • PyQt QFileDialog exec_ 很慢

    我正在使用自定义QFileDialog因为我想选择多个目录 但是exec 功能非常慢 我不明白为什么 我正在使用最新版本的 PyQt 代码片段 from PyQt4 import QtGui QtCore QtNetwork uic cla
  • 在未安装 Qt VS Tools 的情况下以 Qt/MsBuild 格式编译 Qt 项目

    我在 Visual Studio 中有很多 Qt 项目 使用新的 Qt MsBuild 格式 https blog qt io blog 2018 02 16 qt visual studio improving performance 由

随机推荐

  • Ubuntu16.04上升级NVIDIA显卡驱动及安装CUDA10.0操作步骤

    Ubuntu 16 04上已装有CUDA 8 0 现在想再安装CUDA 10 0 由于已安装的显卡驱动版本396 54不支持CUDA 10 0 因此安装CUDA 10 0之前需要先升级显卡驱动到410及以上版本 可在https docs n
  • python输出日志到文件_python将print输出的信息保留到日志文件中

    具体代码如下所示 import sys import os import sys import io import datetime def create detail day return 年 月 日 daytime datetime d
  • 通过白噪声的频谱处理产生任意光谱斜率(f^a)噪声(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章讲解 1 概述 文献来源 摘要 本文研究了具有任意谱
  • 前端例程20220815:拟物风格复选按钮

    演示 原理 本文要实现的按钮大致示意如下 观察者从正上方观看 写代码时主要处理光照以及近大远小等现象 代码
  • 【css】将背景图片设置到元素的右上角

    p 科学熊 将背景图片设置到body元素的右上角 p 效果 background repeat no repeat 设置背景是否重复显示 no repeat为不重复 r
  • java POI解析获取word文件内容

    1 需要的pom文件依赖
  • 微信小程序一键授权之前勾选协议

    微信小程序授权获取手机号之前勾选我已阅读并同意协议 想要实现的效果 用户点击微信一键注册按钮 如果用户没有勾选协议 就提示请勾选用户协议 如果勾选了 就直接获取微信用户的手机号密文 开始想的是直接在getPhoneNumber 方法中加一个
  • python同时发大量请求_PythonWebServer如何同时处理多个请求

    对于初学Web开发 理解一个web server如何能同事处理多个请求很重要 当然更重要的是 理解你通过浏览器发送的请求web server是怎么处理的 然后怎么返回给浏览器 浏览器才能展示的 我到现在还记得大概在2010年左右 看了tom
  • 高德地图的缩放和位移监听

    最近项目采用高德地图 高德地图的文档 demo都很详细 想实现的功能基本上都有 在项目里有一个功能 是类似根据地图的中心经纬度实现数据请求 为了不无限的请求 所以要分别监听 地图的缩放 地图位移 这里就有一个方法 gadMap setOnC
  • matlab根据成绩划分等级_Excel数据分析必备技能:对数据按范围多条件划分等级的判定套路

    点击右上角 关注 每天免费获取干货教程 职场办公中经常要对数据进行整理和分析 其中等级归类划分是很常用的一种方法 在这个过程中用好Excel公式可以事半功倍 但是还是有很多人不了解在Excel中对数据按范围多条件划分等级的系统思路和方法 所
  • Cover Letter常用范式和模版

    摘自 https zhuanlan zhihu com p 26708261 http muchong com html 201401 6920446 html 1 什么是Cover letter Cover Letter 即投稿信 是论文
  • 深聊测开领域之:测试策略模型有哪些?

    测试模型的分类 1 引言 2 金字塔 2 1 金字塔模型 引入 2 2 金字塔弊端 2 3 金字塔图形 3 冰淇淋 3 1 冰淇淋模型 引入 3 2 冰淇淋模型 优缺点 3 2 1 缺点 3 2 2 优点 3 2 冰淇淋图形 4 冠军杯 4
  • 微信小程序面试题汇总

    HTML篇 CSS篇 JS篇 Vue篇 TypeScript篇 React篇 前端面试题汇总大全 含答案超详细 HTML JS CSS汇总篇 持续更新 前端面试题汇总大全二 含答案超详细 Vue TypeScript React Webpa
  • 环境变量知识点

    环境变量 环境变量 环境变量是用来定义系统运行环境的一些参数 比如说 每一个用户的家目录 echo HOME 还有我们在编写C C 代码的时候 在链接的时候 从来不知道我们的所链接的动态静态库在哪里 但是照样可以链接成功 生成可执行程序 原
  • 不使用采集卡,实现相机手机多机位直播

    背景 因为直播需求 现在想实现使用一台相机和一台手机完成直播的两个机位设定 搜了很多视频都是要购买采集卡 违背了性价比这一原则 搜索半天之后 根据当前的设备完成了任务 硬件材料 苹果手机一部 佳能单反 所需软件 1 OBS 主要是用来集成各
  • 刷脸让商家引入智慧经营实现数字化转型

    移动支付在生活中已经实现了全覆盖 从单一的支付到驱动智慧经营 在数据为王的时代 通过对移动支付数据的深度挖掘 整合成消费大数据 移动支付还在经营上改变商户的效率 从以前柜台结账到如今的自助结账 从人工推荐到大数据的精准推荐 彻底的改变了商户
  • Linux make --强大的编译工具

    用途说明 make命令是一个常用的编译命令 尤其是在开发C C 程序时 它通过Makefile文件中描述的源程序之间的依赖关系来自动进行编译 Makefile文件是按照规定的格式编写的 文件中需要说明如何编译各个源文件并连接生成可执行文件
  • CVE-2020-11444:Nexus Repository Manager 3 远程命令执行漏洞

    读者需知 本文仅供学习使用 由于传播和利用此文所造成的损失均由使用者本人负责 文章作者不为此承担责任 简介 Nexus Repository是一个开源的仓库管理系统 可搭建npm maven等私服 Nexus 3 任意修改admin密码越权
  • Socket错误详解及处理方法

    例如错误代码10061 说明服务器已经找到 但连接被服务器拒绝 连接失败原因可能是 端口号设置错误 2 服务器没有处于监听状态 即ServerSocket gt Active true 3 数据包被服务器端的防火墙过滤掉 附 Socket常
  • Qt 连接、操作数据库(增删改查)

    文章目录 Qt 5 9连接MySQL5 7 32 64位 操作数据库 QSqlQuery类 执行SQL语句 查 浏览结果集方法 增 删 改 事务 Qt 5 9连接MySQL5 7 32 64位 MySQL5 7安装好后将其安装路径lib下