Qt实现Mysql数据库的连接,查询,修改,删除,增加功能

Qt实现Mysql数据库的连接,查询,修改,删除,增加功能

  • 安装Mysql数据库,QtCreator

Mysql选择Mysql Server 8.1版本安装。

Mysql Server 8.1安装过程

1.首先添加网络服务权限:

Win+R键输入compmgmt.msc进入,计算机管理-系统工具-本地用户和组-组-Administrator

点击添加,在输入对象名称来选择栏,输入NETWORK SERVICE,点击检查名称,确认完成后退出。

  1. 下载Mysql8.1安装包,安装mysql。

Mysql8.1安装包下载地址:

https://download.csdn.net/download/qq_32663053/89163322

另外Mysql5.7.23版本的安装包下载地址:

https://download.csdn.net/download/qq_32663053/89163442

安装过程如下:

运行安装包:

选择安装类型:

选择安装产品:

执行安装:

安装完成,进行下一步:

Execute

执行下一步:

一直next的直到输入密码:

继续next到最后Mysql安装完毕。

配置环境变量:右击“我的电脑”–>“属性”–>“高级系统设置”–>“高级”–>“环境变量”,在打开的窗口中选择 “系统变量” 下的 “新建” 按钮创建环境变量。

尝试数据库关闭和开启:

“Windows+R”–>输入“cmd”–>Enter

到此Mysql数据库配置完成。

附带有Mysql Workbench,能够图形化处理数据库的功能软件。

  1. 下载QtCreator并加载Mysql驱动

QtCreator下载:由于QtCreator安装包过多,这里不提供。

安装过程:

安装过程选择source文件夹,否则无法配置mysql驱动。以下是我选的选项:

以后直接next直到安装结束。

  • 加载Mysql驱动
  1. 打开mysql.pro文件夹编译并生成mysql驱动文件

Mysql.pro文件位置如下(是本人的),不同的人不同位置。

用QtCreator打开mysql.pro文件配置mysql.pro文件。

圈出来的是要编写的代码,第一个注释掉mysql,第二个是将mysql的include文件和lib文件引入进来DESTDIR代表的是生成的驱动文件。代码写完执行锤子操作。执行结束后生成lib文件,也就是数据库驱动文件。

将数据库驱动文件复制到sqldriver文件夹下:我的目录如下:

将mysql文件夹下的libmysql.dll和libmysql.lib文件复制到qt的bin目录,以下是需要转移的目录

这样我们就可以连接mysql数据库了。

  • Qt连接Mysql数据库

编写代码如下连接Mysql数据库

  1. 首先在工程.pro文件下添加执行sql语句的代码:
  1. 定义一个全局变量QSqlDatabase db;用来打开数据库和操作数据库的变量。

如果连接成功则输出“数据库连接成功!”否则输出“数据库连接失败”+错误原因。

  • 数据库的查询操作

结果图:点击显示数据按钮,实现数据库表数据的显示。

QSqlQuery query=this->queryDatabase("select * from user");

//将数据库的查询结果集赋值给query

QSqlQueryModel *model=new QSqlQueryModel(ui->tableView);

//定义一个querymode绑定ui->tableView

    model->setQuery(query);//将查询结果绑定到模型上

    ui->tableView->setModel(model);

   //设置ui->tableView的mode。

这是显示数据的界面。

  • 数据库的删除操作

数据库的删除代码如下:

QString username = ui->lineEdit_3->text();

//从lineedit获得删除的主键数据进行预删除

    QSqlQuery query;

    //QString username=ui->lineEdit->text();

    //QSqlQuery query;

QString str=QString("delete from user where username='%1'").arg(username);

//编写删除sql语句

    if (!query.exec(str)) {    //执行删除语句

        qDebug() << "删除失败:" << query.lastError().text();

    } else {

        qDebug() << "删除成功";

    }

结果图如下:

  • 数据库的增加操作

数据库的增加数据是在另一个界面实现的,我们需要添加一个ui如下:

这样我们在dialog.cpp实现数据库的增加数据

QString username=ui->lineEdit->text();

QString password=ui->lineEdit_2->text();

//从lineedit读入要插入的数据

    QSqlQuery query;

    query.prepare("insert into sys.user values(?,?)");

    query.addBindValue(username);

query.addBindValue(password);

//预执行sql语句,并在语句中插入列数据

    if(!query.exec()){//执行增加数据语句

        qDebug()<<"无法插入数据";

        QMessageBox::information(NULL"增加表数据","增加失败",QMessageBox::Yes | QMessageBox::NoQMessageBox::Yes);

    }else{

        QMessageBox::information(NULL"增加表数据","增加成功",QMessageBox::Yes | QMessageBox::NoQMessageBox::Yes);

        Dialog::close();

    }

//如果增加失败,停留在子界面

//如果增加成功,返回主界面

//点击返回主界面按钮可以返回

实现的结果图:

  • 数据库的更新操作

更新操作,仍需要在子界面实现,子界面创建如六中的操作,操作是一样的。

首先是连接数据库然后输入主键的数值,找到所有列的信息:

db1=QSqlDatabase::addDatabase("QMYSQL");

    QString host="localhost";

    QString dbName="sys";

    QString user="root";

    QString password="12345";

this->connectToDatabase(host,dbName,user,password);

//以上是连接数据库

QString username = ui->lineEdit_3->text();

//获得主键信息

QSqlQuery query=this->queryDatabase(QString("select * from user where username = '%1'").arg(username));

//执行查询操作

    while (query.next()) {

        QString result = query.value(0).toString();

        QString result1 = query.value(1).toString();

        ui->lineEdit->setText(result);

        ui->lineEdit_2->setText(result1);

        ui->lineEdit->setReadOnly(true);

//将查询到的信息输出到lineedit中。

        qDebug() << result<<"   "<<result1;

}

然后我们修改非主键的列值。进行接下来的更新操作。

QString username = ui->lineEdit_3->text();

QString password = ui->lineEdit_2->text();

//获取所有列的数据,准备增加表数据

    QSqlQuery query;

   QString str=QString("update user set password = ? where username = ?");

//编写sql语句

    query.prepare(str);

    query.addBindValue(password);

query.addBindValue(username);

//预执行sql语句,并为未知量赋值

    if (!query.exec()) {//执行更新语句

        qDebug() << "更新失败:" << query.lastError().text();

        QMessageBox::information(NULL"更新表数据","更新失败",QMessageBox::Yes | QMessageBox::NoQMessageBox::Yes);

    } else {

        qDebug() << "更新成功";

        QMessageBox::information(NULL"更新表数据","更新成功",QMessageBox::Yes | QMessageBox::NoQMessageBox::Yes);

        Dialog1::close();

        //db1.close();

    }

//若成功,提示更新成功,并返回主界面

//若失败,停留在子界面。

实现的结果图:

以上就是QtCreator对Mysql数据库的增加、修改、删除、查询的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux【实战】—— LAMP环境搭建 部署网站

目录 一、介绍 1.1什么是LAMP&#xff1f; 1.2LAMP的作用 二、部署静态网站 2.1 虚拟主机&#xff1a;一台服务器上部署多个网站 2.1.1 安装Apache服务 2.1.2 防火墙配置 2.1.3 准备网站目录 2.1.4 创建网站的配置文件 2.1.5 检查配置文件是否正确 2.1.6 Linux客户端…

web自动化系列-selenium的3种等待方式(十一)

在ui自动化测试中&#xff0c;几乎出现问题最多的情况就是定位不到元素 &#xff0c;当你的自动化在运行过程中 &#xff0c;突然发现报错走不下去了 。很大概率就是因为找不到元素 &#xff0c;而找不到元素的一个主要原因就是页面加载慢 &#xff0c;代码运行速度快导致 。 …

深入理解MySQL中的UPDATE JOIN语句

在MySQL数据库中&#xff0c;UPDATE语句用于修改表中现有的记录。有时&#xff0c;我们需要根据另一个相关联表中的条件来更新表中的数据。这时就需要使用UPDATE JOIN语句。最近我们遇到了这样的需求&#xff1a;我们有一张历史记录表&#xff0c;其中一个字段记录了用,连接的多…

【转】关于vsCode创建后,不显示NPM脚本解决

刚刚使用vue ui新建了个vue项目&#xff0c;打开vs-code发现&#xff0c;无论怎么设置都找不到NPM脚本显示&#xff0c;苦恼了很久&#xff0c;突然发现&#xff01;打开了package-lock.json&#xff0c;然后立马把vs-code关闭&#xff0c;重新打开&#xff0c;就显示了npm脚本…

DePT: Decoupled Prompt Tuning 论文阅读

DePT: Decoupled Prompt Tuning 了论文阅读 Abstract1. Introduction2. Methodology2.1. Preliminaries2.2. A Closer Look at the BNT Problem2.3. Decoupled Prompt Tuning 3. Experiments5. Conclusions 文章信息&#xff1a; 原文链接&#xff1a;https://arxiv.org/abs/…

【行为型模式】模板方法模式

一、模板方法模式概述 模板方法模式定义&#xff1a;在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。(类对象型模式) 模板方法中的基本方法是实现算法的各个步骤&#xff0c;是模板方法的…

rocketmq-dashboard打包测试报错

rocketmq-dashboard运行的时候没问题&#xff0c;但是打包执行测试的时候就是报错 这时候跳过测试就可以成功 报错为 There are test failures. Please refer to D:\CodeEn\rocketmq-dashboard\target\surefire-reports for the individual test results. 你只需要跳过测试就…

vue框架中的路由

vue框架中的路由 一.VueRouter的使用&#xff08;52&#xff09;二.路由模块封装三.声明式导航 - 导航链接1.router-link-active类名2.router-link-exact-active类名3.声明式导航-自定义类名 四.查询参数传参五.动态路由传参方式查询参数传参 VS 动态路由传参 六.动态路由参数的…

javaWeb项目-毕业生就业信息管理系统功能介绍

项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;springboot、SSM、vue、MYSQL、MAVEN 数据库工具&#xff1a;Navicat、SQLyog 1、JSP技术 JSP(Jav…

【Canvas技法】四条C形色带填满一个圆/环形

【关键点】 通过三角函数计算控制点的位置。 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>四条C形色带填满一个…

渐进式交付实践:通过 Argo Rollouts 和 FSM Gateway 实现金丝雀发布

渐进式交付&#xff08;Progressive delivery&#xff09;是一种软件发布策略&#xff0c;旨在更安全、更可控地将新版本软件逐步推出给用户。它是持续交付的进一步提升&#xff0c;允许开发团队在发布新版本时拥有更细粒度的控制&#xff0c;例如可以根据用户反馈、性能指标和…

【论文阅读】YOLO-World | 开集目标检测

Date&#xff1a;2024.02.22&#xff0c;Tencent AI Lab&#xff0c;华中科技大学Paper&#xff1a;https://arxiv.org/pdf/2401.17270.pdfGithub&#xff1a;https://github.com/AILab-CVC/YOLO-World 论文解决的问题&#xff1a; 通过视觉语言建模和大规模数据集上的预训练来…

ruoyi-nbcio-plus基于vue3的flowable的消息中心我的消息的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

Python数据可视化:散点图matplotlib.pyplot.scatter()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 Python数据可视化&#xff1a; 散点图 matplotlib.pyplot.scatter() 请问关于以下代码表述错误的选项是&#xff1f; import matplotlib.pyplot as plt x [1, 2, 3, 4, 5] y [2, 3, 5, 7,…

热塑性聚氨酯TPU的特性有哪些?UV胶水能够粘接热塑性聚氨酯TPU吗?又有哪些优势呢?

热塑性聚氨酯&#xff08;Thermoplastic Polyurethane&#xff0c;TPU&#xff09;是一种具有多种优异性能的弹性塑料&#xff0c;广泛用于各种应用领域。以下是TPU的一些主要特性&#xff1a; 弹性和柔软性&#xff1a; TPU具有良好的弹性和柔软性&#xff0c;能够在受力后迅速…

短视频批量采集提取软件|视频下载工具

短视频批量采集提取软件&#xff1a;高效获取视频资源 一、开发背景 在日常业务中&#xff0c;我们经常需要获取大量的短视频资源&#xff0c;以支持各种需求&#xff0c;但传统的获取方式过于繁琐&#xff0c;一一复制链接下载效率低下。基于此需求&#xff0c;我们开发了一…

Jenkins机器已经安装了ansible, 运行的时候却报错ansible: command not found

操作系统&#xff1a;MacOS Jenkins log提示 ansible: command not found 直接在Jenkins 机器中&#xff0c;进入一样的目录执行ansible --version OK 原因&#xff1a; Jenkins 默认使用的环境是 /usr/bin, 而我的ansible 安装配置在conda3 下面&#xff0c;所以需要在Jenkin…

【工位ubuntu的配置】补充

软件 安装桌面图标的问题 登录密码 root的密码为&#xff1a;19980719 按照如下的链接进行配置&#xff1a; https://blog.csdn.net/zhangmingfie/article/details/131102331?spm1001.2101.3001.6650.3&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7E…

工业控制(ICS)---modbus

Modbus Modbus&#xff0c;市场占有率高、出题频率高,算是最常见的题目&#xff0c;因为这个协议也是工控领域最常见的协议之一&#xff0c;主要有三类 Modbus/RTU 从机地址1B功能码1B数据字段xBCRC值2B 最大长度256B&#xff0c;所以数据字段最大长度252B Modbus/ASCII …

C++笔记:引用

目录 概念&#xff1a; ​编辑 引用的特性&#xff1a; 引用中的权限问题&#xff1a; 引用与指针的区别&#xff1a; 引用的使用&#xff1a; 概念&#xff1a; 引用是给已存在变量取一个别名&#xff0c;编译器不会为引用变量开辟内存空间。 引用的符号&#xff1a;&…