栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 前沿技术 > 大数据 > 大数据系统

Qt连接MySQL数据库踩过的坑

大数据系统 更新时间:发布时间: 百科书网 趣学号
Qt连接mysql数据库踩过的坑

最近要做的项目需要Qt连接MySQL数据库,刚开始接触,踩了不少坑,记录一下。

1.环境

操作系统:Windows10
Qt:5.14.2
Qt Creator:4.11.1
MySQL:mysql-8.0.26-winx64
Navicat:12.0.29(64-bit)

2.Qt中创建测试项目

在Qt中写一个简单的程序测试数据库连接:
(1)在.pro文件中添加QtSql模块支持:QT += sql
(2)main.cpp

#include "mainwindow.h"
#include 
#include 
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    //选择数据源
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    //设置MySql服务器名称
    db.setHostName("localhost");

    //设置端口号
    db.setPort(3306);

    //设置数据库名
    db.setDatabaseName("test");

    //设置用户名密码
    db.setUserName("root");
    db.setPassword("root");

    bool ok = db.open();
    if (ok){

        qDebug() << QString("数据库打开成功");
    }
    else{

        qDebug() << "数据库打开失败:" << db.lastError();
    }

    w.show();
    return a.exec();
}


运行后发现了第一个坑报错:

通过搜查大佬们的博客得知,这是典型的驱动问题,主要和版本有关。在 5.12 及之前的版本中,Qt 的安装包中自带 MySql 驱动,在 plugins/sqldrivers 目录下可以找到。但是!5.13以后就没这个驱动了,很多资料都选择了手动编译。本着小白踩坑的心思,我先选择了手动编译(事实证明,坑太多了!)

3.手动编译MySQL驱动

此时遇到了第二个坑:Qt需要安装源码。注意勾选"Sources"组件,没有安装源码的,专家建议卸载重装。
后面就是在源码里面找到mysql,修改源码,qmake编译。做的时候没截图,给大家放一下大佬的链接仅供学习~

如果大家按照链接步骤顺利编译出来了驱动,恭喜你可以脱坑了。但是小白遇到了第三个坑:按照教程,应该将编译后的qsqlmysql.dll以及qsqlmysqld.dll文件拷贝到相应的目录。小白只编译出来了qsqlmysql.dll一个文件:

找了找原因,两个可能:1.我手残,可能在哪步出了问题自己没发现。2. 教程用的是msvc2017_64,我用的是mingw73_64。抱着侥幸的心思回Qt运行程序,同一个世界,同样的报错~ 还是少驱动,小白认命继续找别的方法。

4.下载mysql-connector-c

偶然发现了一个方法:在https://downloads.mysql.com/archives/c-c/下载mysql-connector-c。下载解压后在lib目录中找到文件“libmysql.dll”,将其复制到Qt的bin目录下,重启Qt Creator打开工程并运行。
注意:libmysql.dll这个文件对应的mysql的位数必须与QT的位数相同

复制好后,回Qt运行程序,遇到了第四个坑:报错,Authentication plugin ‘caching_sha2_password’ cannot be loaded

5.Qt报错Authentication plugin ‘caching_sha2_password’ cannot be loaded

查了一下资料,发现是MySQL版本问题。
MySQL8以前,加密规则是:mysql_native_password
MySQL8以后,加密规则是:caching_sha2_password
很显然现在的问题是加密规则对不上,小白选择修改MySQL的加密规则为mysql_native_password
(1)管理员打开cmd
(2)进入mysql安装目录的bin目录
(3)修改密码,一直没改初始密码,但确实有点繁琐,趁这个机会改成root
命令:mysqladmin -u用户名 -p旧密码 password 新密码

mysqladmin -uroot -pMQpTM.t=!7_z password root

(4)新密码登录

mysql -uroot -p

(5)修改加密规则(password就是数据库密码)

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;

(6)更改用户密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

(7)刷新权限

 FLUSH PRIVILEGES; 

(8)重置密码

alter user 'root'@'localhost' identified by 'root';

注意:不要修改了加密规则就不管后面的了!后面的更改用户密码、刷新权限和重置密码都非常重要!如果改完加密规则就退出的话,你会发现mysql登不上去了… 数据库初始化就变成了唯一的出路!

6.数据库连接成功

大功告成~

7.其他碎碎念

第一次用Qt遇到了不少问题,网上关于这部分的教程杂七杂八的有很多,一个一个尝试也需要时间和耐心,研究了两天bug一个接着一个,每个都不一样就很绝望。好在最后成功了,也算对得起掉的头发哈哈~

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/279900.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号