Qt:配置MySQL

前言

最近需要用Qt写数据库课设,结果配置MySQL配置了一天半。。。好在结果是好的,终于搞定了。下面写这篇文章来记录配置过程中遇到的坑。

  • 对于我自己来说:我学习到了一些配置环境的方法、一些编译原理的知识(感觉之后的编译原理课要好好上了。。)
  • 对于看着篇博客的你来说:如果你无法在Qt中使用MySQL,那么这篇文章对你可能有帮助

一、Qt、MySQL安装(均为64位!)

1. Qt版本5.13.2,对应的编译器MinGW版本7.3.0

下载地址:http://download.qt.io/official_releases/qt/5.13/5.13.2/。在安装的过程中,需要选择以下两个组件:
在这里插入图片描述

2. MySQL版本8.0.11

安装详情看这篇知乎文章即可:超级详细的mysql数据库安装指南。里面有MySQL 8.0.11的网盘下载地址以及详细的安装教程。

注意:如果你在安装Qt时选择MinGW作为编译器,那么一定要修改一下MySQL的安装目录!!!

原因:在之后编译MySQL驱动的时候,会添加MySQL中的一些文件的路径。当MinGW在编译文件的时候,是不允许路径中出现空格的。而MySQL的默认路径就是C:/Program Files/MySQL。所以一定一定一定,在安装MySQL的路径中不能出现空格!

修改安装路径的详细方法参见这篇博客:MySQL更改安装路径和Data位置

二、编译MySQL驱动

这是个什么东西呢?这么说吧,如果你想在Qt中使用MySQL,你需要以下两种动态库文件(即.dll文件)

1. MySQL安装目录下D:\MySQL\mysql_8.0.11\liblibmysql.dll文件

在这里插入图片描述

2. Qt安装目录下D:\Qt\5.13.2\mingw73_64\plugins\sqldriversqsqlmysql.dll文件和qsqlmysqld.dll文件

这两个文件就是编译MySQL驱动时生成的文件
顺便说一下,这两个文件在我下载的这个版本的Qt路径中是没有的,而是通过编译MySQL驱动生成的。(后面详细介绍)

从这些文件中可以看出Qt支持哪些数据库,比如:sqliteodbcpsql
在这里插入图片描述


如何编译驱动?

跟着下面的步骤走,你也可以生成这两个文件!

1. 修改mysql.pro文件

在这里插入图片描述

前面说到,Src子目录中有mysql的源文件。而这个就是源文件中的其中一个文件。用Qt打开它,进行如下修改:
在这里插入图片描述

此时,如果直接编译(build),会报两个错误:
(1)Cannot read…qtsqldrivers-config.pri: No such file or directory
解决办法:mysql.pro的上一级目录中有一个configure.pri文件。所以可以修改qsqldriverbase.pri如下:

在这里插入图片描述

(2)Project ERROR: Library ‘mysql’ is not defined.
解决办法:注释掉mysql.pro文件中的QMAKE_USE += mysql语句
在这里插入图片描述

2. 点击构建项目按钮

在这里插入图片描述
此时,如果没有报错,说明qsqlmysql.dll文件和qsqlmysqld.dll文件已经成功生成。恭喜你,可以进入下一步了!

但是,如果报错了,应该是这个错误(我报的就是这个):
QMYSQL driver not loaded

三、在Qt目录中添加动态库文件

上面说到的两种动态库文件,需要添加到Qt目录下的某个位置,最终才能成功连接数据库!

1. MySQL安装目录下D:\MySQL\mysql_8.0.11\liblibmysql.dll文件

先将这个文件复制,然后粘贴到Qt文件夹的的bin文件夹下
在这里插入图片描述

2. qsqlmysql.dll文件和qsqlmysqld.dll文件

经过上面的操作,已经生成了这两个文件,那么这两个文件在哪里呢?最简单粗暴的办法就是直接搜索(我是这样做的。。。)

搜索到这两个文件之后,先将这两个文件复制,然后粘贴到D:\Qt\5.13.2\mingw73_64\plugins\sqldrivers文件夹下

四、测试连接数据库

可以写一个连接数据库的函数,如下:

#include <QSqlDatabase>
#include <QMessageBox>
#include <QDebug>
#include <QSqlError>
static bool createConnection()
{
    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");//添加一个默认连接,数据库驱动为QMYSQL
    //设置主机名有两种方式
    //db.setHostName("127.0.0.1");//设置主机名,从MySQL的Workbench中查看
    db.setHostName("localhost");//设置主机名
    db.setPort(3306);//设置端口
    db.setDatabaseName("test_schema");//设置数据库名(这个数据库必须是已经存在的数据库)
    db.setUserName("root");//设置用户名
    db.setPassword("******");//设置密码(你自己的密码)
    if(!db.open())
    {
        QMessageBox::critical(0,"Cannot open database",
                              "Unable to establish a database connection.",QMessageBox::Cancel);//提示出错
        qDebug()<<db.lastError().text();//输出错误信息
        return false;
    }
    else
    {
        QMessageBox::information(0,"Successfully","Establish a database connection",QMessageBox::Ok);//提示成功
    }
    return true;
}

然后去主函数中调用,不出意外的话都会成功。

而恰好我在测试的时候就出现了意外,报错:QMYSQL driver not loaded。关于这个报错,我参考了如下这篇博客:QMYSQL driver not loaded 的原理和解决办法。其中说到,即使两种动态库文件都已经添加到Qt目录中,仍有可能报错,原文如下:
在这里插入图片描述

我的解决方案:找到了一篇博客,里面有一个libmysql.dll文件的网盘下载地址:【Qt】Qt5.12编译MySQl5.7驱动(亲自测试成功)

下载之后,把之前添加的libmysql.dll换成下载的这个libmysql.dll文件,然后就成功连接数据库了。我觉得原因可能就是上面这篇博客说的原因,但是我也不知道为什么按照这个流程走下来的两种动态库文件不配套,也不知道如果要让他们配套应该怎么做。。。如果有人知道的话,还望指点指点小弟^^


配环境真的是太累了,不过配置成功之后还是蛮有成就感的。

Over!

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QT6中配置MySQL 5.7需要以下步骤: 1. 首先,确保你已经安装了MySQL 5.7数据库,并且数据库服务器正在运行。 2. 打开QT6,创建一个新的QT项目或者打开一个已有的项目。 3. 在项目文件(.pro)中添加MySQL相关的模块。在.pro文件中添加以下代码: ``` QT += sql ``` 4. 在代码中包含MySQL相关的头文件。在你的代码文件中添加以下代码: ``` #include <QSqlDatabase> #include <QSqlQuery> ``` 5. 在代码中配置数据库连接。在你的代码文件中添加以下代码: ``` QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); // 设置数据库主机名 db.setPort(3306); // 设置数据库端口号 db.setDatabaseName("your_database_name"); // 设置数据库名称 db.setUserName("your_username"); // 设置数据库用户名 db.setPassword("your_password"); // 设置数据库密码 if (db.open()) { // 数据库连接成功 // 进行数据库操作 } else { // 数据库连接失败 // 处理连接失败的逻辑 } ``` 请将上述代码中的"your_database_name"替换为你的数据库名称,"your_username"替换为你的数据库用户名,"your_password"替换为你的数据库密码。 6. 进行数据库操作。在连接成功后,你可以使用QSqlQuery类执行SQL查询和操作数据库。例如: ``` QSqlQuery query; query.exec("SELECT * FROM your_table_name"); // 执行查询语句 while (query.next()) { // 处理查询结果 } ``` 请将上述代码中的"your_table_name"替换为你要查询的表名。 以上是在QT6中配置MySQL 5.7的基本步骤。如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值