QT6.0+mysql8.0+VS2019连接数据库

Posted 视觉技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT6.0+mysql8.0+VS2019连接数据库相关的知识,希望对你有一定的参考价值。

QT6.0+mysql8.0+VS2019连接数据库

由于法律问题QT不在提供mysql驱动,因此必须自己编译,找了很久没发现QT6的编译说明,特此记录,注意以下目录均为本机目录,需要根据自己的安装路径找到对应目录。

  1. QT源码下载及配置,可以单独下载也可以启动安装工具增加,已安装请忽略。

  2. QT源码安装好后转到mysql驱动目录:C:\Qt\6.0.0\Src\qtbase\src\plugins\sqldrivers\mysql

    双击mysql.pro使用Qt Creator打开。

  3. 安装MySQL C Connector,MySQL 8.0.19及以上安装包,不再提供C接口安装,需单独下载安装,更新链接。安装完成找到如下目录:

    <MySQL dir>/lib/libmysql.lib <MySQL dir>/lib/libmysql.dll <MySQL dir>/include/mysql.h

1). MySQL dir为mysql的C Connector目录,在我的电脑上为:C:\Program Files\MySQL\MySQL Connector C 6.1

2). MySQL8.19之前安装包在安装选项中选择C Connector安装;

  1. 在打开的QT工程中修改配置如下:

    a. 注视掉QMAKE_USE += mysql:

    #QMAKE_USE += mysql

    b. 增加include和lib配置,注意lib不是目录而是文件,否则会引起编译错误“Qt 无法打开输入文件*.obj”

    LIBS += "C:\\Program Files\\MySQL\\MySQL Connector C 6.1\\lib\\libmysql.lib"
    INCLUDEPATH += "C:\\Program Files\\MySQL\\MySQL Connector C 6.1\\include"

    注意:若源代码为单独下载,还需要配置pri文件中下面目录,根据实际找到的目录配置

链接库拷贝

  1. 根据编译信息将编译完成的链接库拷贝到QT目录链接库目录为:C:\plugins\sqldrivers,根据源代码修改盘符。QT目录为:C:\Qt\6.0.0\msvc2019_64\plugins\sqldrivers

  2. 拷贝mysql.dll链接库到QT路径,mysql路径为和之前添加的lib路径在一起:C:\Program Files\MySQL\MySQL Connector C 6.1\lib拷贝到QT的路径为:C:\Qt\6.0.0\msvc2019_64\bin

  3. 编译完成

连接错误:”caching_sha2_password“

原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,解决方案:把mysql用户登录密码加密规则还原成mysql_native_password方法:

  1. 转到mysql目录下打开cmd,我的目录为C:\Program Files\MySQL\MySQL Server 8.0\bin

  2. 登录mysql,并输入password:

    mysql -u root -p

  3. 修改账户密码加密规则并更新用户密码

     ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;  #修改加密规则 

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码
  4. 刷新权限并重置密码

    FLUSH PRIVILEGES;  #刷新权限
  5. 单独重置密码,改为自己密码

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

    参考

测试代码:

  //! 查看mysql驱动是否load成功
qDebug() << QSqlDatabase::drivers();

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("db_oqc");
db.setUserName("root");
db.setPassword("hzws");
bool ok = db.open();

if (ok)
{
qDebug() << QObject::tr(u8"连接数据库ok");
}
else
{
//! 连接失败查看错误信息
QSqlError error = db.lastError();
qDebug() << QObject::tr(u8"连接数据库失败") << error.databaseText();
}

以上是关于QT6.0+mysql8.0+VS2019连接数据库的主要内容,如果未能解决你的问题,请参考以下文章

PCL1.12+VTK9.1+QT6编译部署

PCL1.12+VTK9.1+QT6编译部署

PCL1.12+VTK9.1+QT6编译部署

PyCharm Community 2019.2 连接MySQL8.0 时区不同步的解决

使用Navicat远程连接MySQL8.0+版本

(Win10)Java,Maven,Tomcat8.0,Mysql8.0.15安装与环境配置,以及IDEA2019.3使用JDBC连接MySQL创建JavaEE项目