iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >Qt6教程之三(16) Qt使用mysql数据库
  • 733
分享到

Qt6教程之三(16) Qt使用mysql数据库

qtc++ 2023-10-25 18:10:01 733人浏览 泡泡鱼
摘要

目录 一 MySQL数据库简介 二 MySQL社区版下载安装教程 三 建立数据库和表 四 准备MySQL的Qt连接驱动程序 五 测试MySQL与Qt的连接 六 Qt程序与MySQL数据的交互 一 Mysql数据库简介 mysql是

目录

一 MySQL数据库简介

二 MySQL社区版下载安装教程

三 建立数据库和表

四 准备MySQL的Qt连接驱动程序

五 测试MySQL与Qt的连接

六 Qt程序与MySQL数据的交互


一 Mysql数据库简介

mysql是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。Mysql 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库

MySQL是数据库管理系统中的一种,是市面上最流行的数据库管理软件之一。据统计,MySQL是目前使用率最高的数据库管理软件,知名企业比如淘宝、网易、百度、新浪、Facebook等大部分互联网公司都在使用MySQL,而且不仅仅是互联网领域,许多游戏公司也在使用MySQL,比如劲舞团、魔兽世界之类我们熟知的游戏。甚至连中国移动、中国电网这样的知名国企也在使用MySQL。由此可知,MySQL的受众的非常广的。

二 MySQL社区版下载安装教程

官网下载地址:MySQL :: Begin Your Download ,注意区分操作系统,博主使用的是window系统,直接使用该链接下载安装即可!

 如果是其他系统,请在MySQL :: Download MySQL Installer 里面选择自己的操作系统下载,如下:

等待下载完成后, 双击安装包开始安装,如下:

 安装过程:

1,选择自定义安装,点击下一步,

  1. 避免下次安装其他组件麻烦,我们把所有的组件全部安装。

先在左边选择组件,然后在点击中间的绿色箭头,表示我们要安装这个组件,

  1. 依次选中右边的每一个组件根目录,点击下方的advanced options设置安装路径,

4,设置自己想要安装的路径,如果不设置则默认安装到C盘下面,这里要特别注意一下。设置好之后点击OK,接下来的其他组件选择安装路径操作重复第3、4步即可。

5,设置完各个组件的安装路径后,点击下一步,

6,点击执行 execute,点击后需要大概5分钟左右的安装时间,等待全部组件安装完成,

7,全部组件安装完成后,继续点击下一步 next,

8,继续下一步 next,

9,设置一些选项,如果下一步next不可以点击的话,是因为端口有冲突,重新改一个可用的端口即可,我这里设置为3307,设置完成后继续下一步next,

10,默认使用密码方式,点击下一步next,

11,设置密码,两次输入的密码要一致,接着点击下一步next,

12,保持默认,继续点击下一步next,

13,设置MySQL相关的各种日志路径,点击右侧的三个小点来设置路径,

日志路径我这里是跟MySQL的组件安装路径设置为一致,设置完成后,继续下一步next,

14,保持默认,继续下一步next,

15,点击execute 执行,

执行完成后点击finish,

15,点击next,

16,保持默认,点击finish,

17,点击next,

输入之前我们设置的密码,并check一下,若密码验证通过,则出现一个绿色箭头,继续下一步,

18,点击execute执行,

等待执行完成后,点击finish,

19,点击下一步next,

接着点击finish,

至此,MySQL安装完成,此时会自动弹出MySQL客户端和MySQL workbench,如下

到这里,恭喜大家,你的MySQL环境安装完成了,可以准备后面的Qt交互开发工作了。

三 建立数据库和表

首先我们启动MySQL的命令行客户端,

启动后,输入安装时配置的密码,敲击回车确认,如下:

接着创建一个数据库,叫my_database ,命令是create database my_database ;

接着,我们查看一下数据库表,是否存在my_database数据库,命令是show databases;

接下来, 使用my_database数据库,并在数据中创建一个表,叫my_table ,命令如下,

 use my_database;create table student(name char(10),  //姓名age smallint,   //年龄sex char(2));   //性别

 现在我们开始使用Qt代码来对这张表进行操作,也就是增删改查的操作。

 准备MySQL的Qt连接驱动程序

在网站在以下网址中下载和当前Qt版本对应的驱动,

Releases · thecodemonkey86/qt_mysql_driver · GitHub 

博主使用的Qt版本是6.2.4 ,所以下载的驱动为下面的第一个(我使用的编译器是MinGW).

https://github.com/thecodemonkey86/qt_mysql_driver/files/8312271/qsqlmysql.dll_Qt_SQL_driver_6.2.4_MinGW_11.2.0_64-bit.zip

https://github.com/thecodemonkey86/qt_mysql_driver/files/8312273/qsqlmysql.dll_Qt_SQL_driver_6.2.4_MSVC2019_64-bit.zip

然后把下载的文件解压,得到一个文件夹,如箭头所示:

qsqlmysql.dll_Qt_SQL_driver_6.2.4_MinGW_11.2.0_64-bit\release\libmysql.dll拷贝到qt 对应编译器的bin目录下,即D:\Qt6.2\6.2.4\mingw_64\bin ; 

qsqlmysql.dll_Qt_SQL_driver_6.2.4_MinGW_11.2.0_64-bit\release\sqldrivers\qsqlmysql.dll及.debug文件拷贝到对应编译器plugins/sqldrivers目录下,

​ 

 若Qt Qcreator已经启动,则重启之后才能使用,下面开始新建一个工程,测试一下看看MySQL能否连接成功!

五 测试MySQL与Qt的连接

我们新建一个工程叫test_QtConnectMySQL ,并在工程文件中导入数据库模块,根据不同的构建器写入,博主新建项目时选择的是CMake,下面是两种构建器导入模块的写法,写完之后记得按CTRL+S保存:

CMake:find_package(Qt6 COMPONENTS Sql REQUIRED)target_link_libraries(test_QtConnectMySQL PRIVATE Qt6::Sql)qmake:QT += sql

开始写代码:

#include "mainwindow.h"#include "./ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent)    , ui(new Ui::MainWindow){    ui->setupUi(this);    linkDatabase();}MainWindow::~MainWindow(){    delete ui;}//连接数据库void MainWindow::linkDatabase(){  QSqlDatabase database=QSqlDatabase::addDatabase("QMYSQL");  database.setHostName("127.0.0.1");  database.setPort(3307);  database.setUserName("root");  database.setPassword("123456");  database.setDatabaseName("my_database");  if(! database.open()){      ui->statusbar->showMessage("连接MySQL失败: "+database.lastError().text());  }else{      ui->statusbar->showMessage("连接MySQL成功: "+database.databaseName());  }}

 运行代码后,提示数据库连接成功,说明上面的所有配置正确,

接下来我们将在工程中实现数据库的增删改查,同时把操作的数据实时显示出来。 

Qt程序与MySQL数据的交互

本实例主要实现操作数据库里面的数据的增加、删除、修改、查询功能,完整代码如下:

Mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include #include #include #include #include QT_BEGIN_NAMESPACEnamespace Ui { class MainWindow; }QT_END_NAMESPACEclass MainWindow : public QMainWindow{    Q_OBJECTpublic:    MainWindow(QWidget *parent = nullptr);    ~MainWindow();    void showDriver();private slots:    void linkDatabase(); //连接数据库    void closeDatabase();//关闭数据库    void query();  //从数据库中查询数据    void insert(); //从数据库中新增数据    void del();//从数据库中删除数据    void update();//从数据库中修改数据    void showData(); //实时展示数据private:    Ui::MainWindow *ui;    QSqlDatabase database;    QSqlError sqlError;    QSqlQuery *sqlQuery;    QSqlRecord sqlRecord;};#endif // MAINWINDOW_H

Mainwindow.cpp

#include "mainwindow.h"#include "./ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent)    : QMainWindow(parent)    , ui(new Ui::MainWindow){    ui->setupUi(this);    showDriver();    connect(ui->linkMySQL,SIGNAL(clicked(bool)),this,SLOT(linkDatabase()));    connect(ui->DisMySQL,SIGNAL(clicked(bool)),this,SLOT(closeDatabase()));    connect(ui->insert,SIGNAL(clicked(bool)),this,SLOT(insert()));    connect(ui->del,SIGNAL(clicked(bool)),this,SLOT(del()));    connect(ui->update,SIGNAL(clicked(bool)),this,SLOT(update()));    connect(ui->query,SIGNAL(clicked(bool)),this,SLOT(showData()));}MainWindow::~MainWindow(){    delete ui;    closeDatabase(); //程序退出前关闭数据库    delete sqlQuery;}void MainWindow::showDriver(){    QStringList list=database.drivers();    ui->showData->append("Qt支持的驱动有:");    for (int var = 0; var < list.length(); ++var) {        ui->showData->append(list[var]);    }}//连接数据库void MainWindow::linkDatabase(){    database=QSqlDatabase::addDatabase("QMYSQL");    database.setHostName("127.0.0.1");    database.setPort(3307);    database.setUserName("root");    database.setPassword("123456");    database.setDatabaseName("my_database");    if(database.open()){        ui->showData->append("连接MySQL成功: "+database.databaseName());        //当只有一个数据库时,我们需要把sqlQuery类与数据库进行绑定,不然会执行语句失败和导入驱动失败        sqlQuery=new QSqlQuery("my_database");    }else{        ui->showData->append("连接MySQL失败: "+database.lastError().text());    }}//关闭数据库void MainWindow::closeDatabase(){    if(database.isOpen()){        database.close();        ui->showData->append("数据库已经断开连接!");    }}//查询操作void MainWindow::query(){        //获取表格所有字段名称    QString AllCharNameSql=QString("select COLUMN_NAME from information_schema.COLUMNS where table_name = 'student';");    //ui->showData->append("查询表格的所有字段名称的语句为:"+AllCharNameSql);    //开始查询,并判断是否执行成功    if(sqlQuery->exec(AllCharNameSql)) {        qDebug()<<"查询结果的条数:"+QString::number(sqlQuery->size());        //获取查询到的数据        ui->showData->append("查询到的字段为:");        while (sqlQuery->next()) {            //根据下标找到对应字段的值            ui->showData->append(sqlQuery->value(0).toString());        }    }else {        ui->showData->append("查询失败:"+sqlQuery->lastError().text());    }    //获取数据库中的所有表名    QString allTableName=QString("select table_name from information_schema.tables where table_schema='my_database';");    //判断执行语句是否成功    if(sqlQuery->exec(allTableName)){        ui->showData->append("查询结果条数:"+QString::number(sqlQuery->size()));        //遍历所有结果        while(sqlQuery->next()){            //根据下标找到对应字段值            ui->showData->append(sqlQuery->value(0).toString());        }    }else {        ui->showData->append("查询错误:"+sqlQuery->lastError().text());    }    //查询所有数据    QString sql2=QString("select *from student;");    if(sqlQuery->exec(sql2)){         ui->showData->append("查找结果条数:"+QString::number(sqlQuery->size()));        //遍历查询到的所有数据        while (sqlQuery->next()) {             ui->showData->append(sqlQuery->value("name").toString()); //姓名             ui->showData->append(QString::number(sqlQuery->value("age").toInt())); //年龄             ui->showData->append(sqlQuery->value("sex").toString()); //性别        }    }else{        ui->showData->append("查询结果错误:"+sqlQuery->lastError().text());    }    //根据指定字段查询列信息    QString sql3=QString("select name from student;");    if(sqlQuery->exec(sql3)){        ui->showData->append("查找结果数量:"+QString::number(sqlQuery->size()));        //遍历所有数据        while (sqlQuery->next()) {            ui->showData->append(sqlQuery->value(0).toString());        }    }else{        ui->showData->append("查询结果错误:"+sqlQuery->lastError().text());    }}//插入数据void MainWindow::insert(){    ui->showData->setText("");    QString name=ui->name->text().trimmed();    int age=ui->age->text().trimmed().toInt();    QString sex=ui->sex->text().trimmed();    //插入一条数据   QString sql=QString( "insert into student(name,age,sex) values('%1',%2,'%3');").arg(name).arg(age).arg(sex);   //判断是否执行成功   if(sqlQuery->exec(sql)){       ui->showData->append("插入数据数量:"+QString::number(sqlQuery->size()));       //遍历查询到的所有数据       while (sqlQuery->next()) {           QString name,age,sex;           name=sqlQuery->value("name").toString(); //姓名           age=QString::number(sqlQuery->value("age").toInt()); //年龄           sex=sqlQuery->value("sex").toString(); //性别           ui->showData->append("name:"+name+"  "+"age:"+age+"  "+"sex:"+sex);       }   }else {       ui->showData->append("插入数据失败"+sqlQuery->lastError().text());   }}//删除数据void MainWindow::del(){    ui->showData->setText("");    //QString name=ui->name->text().trimmed();    int age=ui->age->text().trimmed().toInt();    //QString sex=ui->sex->text().trimmed();    QString sql=QString("delete from student where age=%1;").arg(age);    //开始执行查询语句    if(sqlQuery->exec(sql)){        ui->showData->append("删除成功");        ui->showData->append("删除数据后的结果为:");        //遍历查询到的所有数据        while (sqlQuery->next()) {            QString name,age,sex;            name=sqlQuery->value("name").toString(); //姓名            age=QString::number(sqlQuery->value("age").toInt()); //年龄            sex=sqlQuery->value("sex").toString(); //性别            ui->showData->append("name:"+name+"  "+"age:"+age+"  "+"sex:"+sex);        }    }else{        ui->showData->append("删除数据失败:"+sqlQuery->lastError().text());    }}//修改数据void MainWindow::update(){    ui->showData->setText("");    QString name=ui->name->text().trimmed();    int age=ui->age->text().trimmed().toInt();    //QString sex=ui->sex->text().trimmed();    QString sql=QString("update student set name='%1' where age='%2';").arg(name).arg(age);    //开始执行查询语句    if(sqlQuery->exec(sql)){        ui->showData->append("修改成功");        ui->showData->append("修改数据后的结果为:");        //遍历查询到的所有数据        while (sqlQuery->next()) {            QString name,age,sex;            name=sqlQuery->value("name").toString(); //姓名            age=QString::number(sqlQuery->value("age").toInt()); //年龄            sex=sqlQuery->value("sex").toString(); //性别            ui->showData->append("name:"+name+"  "+"age:"+age+"  "+"sex:"+sex);        }    }else{        ui->showData->append("修改数据失败:"+sqlQuery->lastError().text());    }}//查询所有数据void MainWindow::showData(){    ui->showData->setText("");    QString sql=QString("select *from student;");    //开始执行查询语句    if(sqlQuery->exec(sql)){        ui->showData->append("查询成功");        ui->showData->append("查询数据结果为:");        //遍历查询到的所有数据        while (sqlQuery->next()) {            QString name,age,sex;            name=sqlQuery->value("name").toString(); //姓名            age=QString::number(sqlQuery->value("age").toInt()); //年龄            sex=sqlQuery->value("sex").toString(); //性别            ui->showData->append("name:"+name+"  "+"age:"+age+"  "+"sex:"+sex);        }    }else{        ui->showData->append("查询数据失败:"+sqlQuery->lastError().text());    }}

main.cpp

#include "mainwindow.h"#include int main(int arGC, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.show();    return a.exec();}

界面布局与对象名称:

 

运行效果:

 

下一篇博客:

Qt6教程之三(17) SQLite数据库使用_折腾猿王申兵的博客-CSDN博客

上一篇博客:

Qt6教程之三(15) Modbus通信_折腾猿王申兵的博客-CSDN博客

来源地址:https://blog.csdn.net/XiaoWang_csdn/article/details/129789509

您可能感兴趣的文档:

--结束END--

本文标题: Qt6教程之三(16) Qt使用mysql数据库

本文链接: https://www.lsjlt.com/news/442733.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Qt6教程之三(16) Qt使用mysql数据库
    目录 一 MySQL数据库简介 二 MySQL社区版下载安装教程 三 建立数据库和表 四 准备MySQL的Qt连接驱动程序 五 测试MySQL与Qt的连接 六 Qt程序与MySQL数据的交互 一 MySQL数据库简介 MySQL是...
    99+
    2023-10-25
    qt c++
  • Qt连接MySQL数据库最详细的教程
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.直接通过MySQL的驱动加载数据库1)所需代码2)解决QMYSQL driver not loaded ...
    99+
    2023-10-02
    mysql qt 数据库
  • Qt数据库应用之通用数据库同步
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 数据库同步的主要功能是将本地的数据库记录同步到远程的数据库,其中数据库类型不限,比如本地是sqlite数据库,远程...
    99+
    2024-04-02
  • IDEA的database使用教程(使用mysql数据库)
    IDEA的database使用教程(使用mysql数据库) 用了企业版的idea之后,有了database服务,疯狂找教程,大多只是说明如何连接,没有清楚说明如何操作,所以我就研究了一番写个教程。 1.连接数据库 打开最右侧边框的data...
    99+
    2023-08-17
    intellij-idea mysql 数据库
  • MySql数据库触发器使用教程
    目录一、介绍二、操作1、表数据准备2、触发器格式3、操作三、触发器NEW和OLD的使用1、案例四、其他操作五、注意事项补充:验证触发器总结一、介绍 1、触发器是一种特殊的存储过程。触...
    99+
    2024-04-02
  • MySQL系列教程之使用C语言来连接数据库
    目录写在前面一、准备工作1.1 把 libmysql.dll 和 libmysql.lib 文件复制到工程目录下1.2 添加 libmysql.lib 1.3 添加 inc...
    99+
    2024-04-02
  • C/C++ Qt数据库与SqlTableModel组件应用教程
    SqlTableModel 组件可以将数据库中的特定字段动态显示在TableView表格组件中,通常设置QSqlTableModel类的变量作为数据模型后就可以显示数据表内容,界面组...
    99+
    2024-04-02
  • Qt数据库应用之实现通用数据库请求
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 数据库请求是在数据库采集的基础上,换成http请求的形式来获取数据,这样就脱离了数据库组件,而采用的通用的http...
    99+
    2024-04-02
  • Qt数据库应用之实现通用数据库分页
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 数据库分页展示,在所有的涉及到数据库记录的项目中都是需要的,除了简单的设备信息表、用户信息表这种很少几条几十条数据...
    99+
    2024-04-02
  • Qt数据库应用之实现通用数据库清理
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 很多项目如果需要存储很多日志记录比如运行日志,时间长了记录数量非常多,数据库体积不断增大,对应数据库表的增删改查的...
    99+
    2024-04-02
  • Qt数据库应用之实现通用数据库采集
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 数据库采集对应的就是上一篇文章的数据库同步,数据库同步到云端数据库以后,app、网页、小程序啥的要数据的话,可以通...
    99+
    2024-04-02
  • Qt操作SQLite数据库的教程详解
    目录0.前言1.驱动2.初相遇3.创建表4.执行增删改查5.进阶0.前言 SQLite是一款开源、轻量级、跨平台的数据库,无需server,无需安装和管理配置。它的设计目标是嵌入式的...
    99+
    2022-12-08
    Qt操作SQLite数据库 Qt SQLite数据库 Qt操作SQLite
  • Qt数据库应用之数据打印到pdf
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 自从数据可以导出到xls,又有客户提出了不同的需求,比如既然可以将数据导出到xls,那是否可以导出到pdf文件呢?...
    99+
    2024-04-02
  • QT连接Mysql数据库的详细教程(亲测成功版)
    目录前言方法一、直接通过mysql的驱动加载数据库方法二、通过ODBC连接MySQL数据库1.下载地址2.ODBC连接代码总结前言 QT连接Mysql数据库步骤相对比较麻烦,因此写了篇文章将详细过程呈现给大家。 方法一、...
    99+
    2023-05-12
    qt连接mysql qt连接MySQL数据库 qt远程连接数据库
  • Ubuntu中怎么使用Qt连接MySQL数据库
    这篇文章将为大家详细讲解有关Ubuntu中怎么使用Qt连接MySQL数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。环境说明:  ubuntu 10.0...
    99+
    2024-04-02
  • MySQL系列数据库设计三范式教程示例
    目录一、数据库设计三范式相关知识说明1、什么是设计范式?2、为什么要学习数据库的三个范式?3、三范式都有哪些?二、数据库表的经典设计方案一对一怎么设计?一、数据库设计三范式相关知识说...
    99+
    2024-04-02
  • 可能是全网最详细的Qt连接MySQL数据库教程
    目录1.直接通过MySQL的驱动加载数据库1)所需代码2)解决QMYSQL driver not loaded2.通过ODBC连接MySQL数据库1)官方解释:2)下载ODBC3)连...
    99+
    2023-05-16
    qt连接mysql数据库 qt连接mysql qt操作mysql
  • QT连接MYSQL数据库的详细过程
    这篇文章主要介绍“QT连接MYSQL数据库的详细过程”,在日常操作中,相信很多人在QT连接MYSQL数据库的详细过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”QT连接MYSQL数据库的详细过程”的疑惑有所...
    99+
    2023-06-20
  • Qt数据库应用之实现通用数据生成器
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 有两种应用场景需要用到数据生成器,一种是需要测试数据库性能,比如在100万条和1000万条记录的时候对比查询或更新...
    99+
    2024-04-02
  • Qt数据库应用之实现数据图文混排
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 除了能够打印基本的文字信息数据到pdf和纸张,越来越多的应用需求还要求能够导出图片,并且要支持图文混排,相当于do...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作