相关推荐recommended
完美解决Qt中关于Mysql程序的连接、打包等各类问题
作者:mmseoamin日期:2023-12-25

分享Qt如何连接Mysql、如何打包Mysql程序,完美解决连接和打包Mysql程序所出现的各类问题。       

在Qt项目开发过程中,如果涉及到数据的存储,那么肯定会用到数据库,本篇文章以Mysql数据库为例,讲述Qt如何连接Mysql、如何打包含有Mysql的程序,并解决客户收到程序后无法加载数据库等各类问题。

目录

1.连接Mysql 

1.1 编译Mysql插件

1.2 连接Mysql(代码部分)

2.Qt中Mysql程序打包

2.1 Qt如何打包

(1)添加图标

(2)Release

(3)打包程序 

 2.2 添加Mysql打包所依赖的库

3.常见的问题与解决方案

1.数据库打开失败:QMYSQL driver not loaded

2.对方收到我们打包的程序后,无法加载数据库的内容

3.连接Mysql时出现 [LspTrace] 或 [LSP] 字样 

4.打包失败,点击exe可执行文件后还是无法打开


1.连接Mysql 

1.1 编译Mysql插件

我使用的Qt版本是Qt 5.12.9 Mysql用的是MySQL 8.0,需要强调的是Qt编译套件的位数一定要和Mysql的位数相同,要么都是32位,要么都是64位,不然编译肯定不会成功。

关于Mysql的连接,首先我们找到Qt的安装目录,如图,将其打开。

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第1张

打开后选择与Mysql位数相同的编译套件,然后打开项目文件mysql.pro ,改成和我一样,将第6行注释起来,并根据自己Mysql安装路径修改第10至12行,修改完成后即可编译项目。

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第2张

如果编译过程中出现报错Cannot read .../qtsqldrivers-config.pri: No Such file or directory 

打开qsqldriverbase.pri这个文件,按照如图进行修改,注释第4行,添加第5行。

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第3张

此时再编译这个项目,就不会报错了。同时我们会在安装Qt的磁盘(比如我就是E盘)下面发现自动生成了一个plugins的目录,如图。

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第4张

 这几个库就是Qt连接Mysql所需要的插件,我们把它复制到如图所示的目录下(我用的都是64位)

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第5张

然后还需要将 Mysql 的动态库拷贝到 Qt 的编译套件目录中,先找到 Mysql 的动态库 

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第6张

复制到如图所示的目录下 

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第7张

就此,就可以用Qt连接Mysql啦。

1.2 连接Mysql(代码部分)

在写代码之前,首先应在.pro文件中添加QT += sql

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第8张

 添加Mysql所需要的头文件。

#include 
#include 
#include 

连接代码如下: 

    QStringList list = QSqlDatabase::drivers();   // 显示本机能连接的数据库
    qDebug() << list;
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");  
    //db.setHostName("localhost");                // 如果时连接本地数据库 可以直接填 localhost  或 127.0.0.1
    db.setHostName("127.0.0.1");                  // IP地址
    db.setUserName("username");                   // 数据库用户名
    db.setDatabaseName("db");                     // 所需要打开的数据库的名称
    db.setPassword("password");                   // 数据库密码
    //db.setPort(3306);                           // 端口,若连接的是本地数据库可以不写这一行
    if(!db.open()){                               // 连接数据库
        qDebug() << "失败原因:" << db.lastError().text();
    }else{
        qDebug() << "连接成功!!!";
    }

连接之后就直接对数据进行一系列操作。

    QSqlQuery query;
    QString sql1 = "select * from db";
    query.exec(sql1);
    while(query.next()){
        //取出当前记录中的字段值
        qDebug() << query.value(0).toInt()
                 << query.value("name").toString()
                 << query.value("age").toInt()
                 << query.value(3).toString()
                 << query.value(4).toString();
    }

2.Qt中Mysql程序打包

2.1 Qt如何打包

(1)添加图标

找到一张格式为.ico的图片(图片格式必须是ico),将图标放在工程目录下(与.pro同级),然后在项目工程文件(.pro)中添加一行RC_ICONS = 图标名.ico

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第9张

(2)Release

Debug改为Release,然后重新编译项目

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第10张

 编译完成后你可以在release文件目录下找到你设置好图标的可执行文件

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第11张

(3)打包程序 

在任何一个地方新建一个文件夹(注意不要有中文路径),然后将刚才看到的release目录下的可执行程序复制粘贴进去,然后点击左下角的开始菜单,找到Qt,点击如图的Qt 5.12.9(MinGW 7.3.0 64-bit)(根据自己之前编译的位数)。

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第12张

 打开QT工作台 输入 cd /d 刚创建的文件夹路径\文件名  然后回车键

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第13张

 然后输入 windeployqt 可执行文件名.exe,回车键它就会自动进行编译,将所有的库都添加进这个文件夹。

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第14张

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第15张

此时就可以双击可执行文件打开软件啦,也可以压缩打包发给别人,但是如果你在程序里添加了Mysql相关的东西,这样打包发送的话对方并不能连接到你的数据库和查看到库里的数据。还需要添加几个相关的库才行。

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第16张

 2.2 添加Mysql打包所依赖的库

一共有四个库需要添加,前两个是在MySQL安装目录下的 libmysql.dll 和 libmysql.lib

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第17张

 后面两个需要去官网下载,网址为:MySQL :: MySQL Community Downloads完美解决Qt中关于Mysql程序的连接、打包等各类问题,第18张https://dev.mysql.com/downloads/

点击如图红框内的链接 

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第19张

根据你的位数选一个安装,我装的是第2个 ,安装解压后进入lib64,找到 libcrypto-1_1-x64.dll 和 libssl-1_1-x64.dll 两个动态库。这就是另外两个所需要的库,将这四个库一起添加到刚才打包的文件中。

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第20张

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第21张

 如此操作后,别人也可以连接至数据库并查看到程序里Mysql中的内容啦。

3.常见的问题与解决方案

所有的流程,如果是按我上面一步一步来的话应该是不会报错的,这里我挑几个常见的问题

1.数据库打开失败:QMYSQL driver not loaded

出现这个提示有几种原因:

一是连接数据库失败,如果你的程序在这两行代码后显示的输出中没有QMYSQL,说明你的Qt没有连接Mysql成功,此时应检查你使用的Qt编译套件的位数是否与Mysql位数是一致的,若一致,请根据上面1.1的步骤检查。

    QStringList list = QSqlDatabase::drivers();   // 显示本机能连接的数据库
    qDebug() << list;

 完美解决Qt中关于Mysql程序的连接、打包等各类问题,第22张

 二是缺少安全模块的动态库,就是上面2.2所下载的两个动态库,按照步骤下载,然后把这两个动态库拷贝到和连接数据库的可执行程序同一级目录中就可以了。

2.对方收到我们打包的程序后,无法加载数据库的内容

这是由于在打包时,没有添加Mysql所依赖的动态库所致,可以按照上面2.2的步骤添加以下4个动态库

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第23张

3.连接Mysql时出现 [LspTrace] 或 [LSP] 字样 

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第24张

解决方法:1.以管理员身份进入命令提示符窗口

                  2.输入 netsh winsock reset ,然后敲下回车键

                  3.重启电脑,就再无提示                

完美解决Qt中关于Mysql程序的连接、打包等各类问题,第25张

4.打包失败,点击exe可执行文件后还是无法打开

首先检查打包文件的文件是否有中文路径,然后是Qt程序也不能有中文路径,路径正常后按照上面2.1的步骤即可打包成功。

这是我所归纳的所有关于Qt中连接Mysql和打包Mysql程序的步骤、方法,如果对您有帮助,别忘了点个赞收藏一下,如果说的有什么不对,欢迎在评论区指出,谢谢大家!