QT6.0+mysql8.0+VS2019连接数据库
Posted 视觉技术
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT6.0+mysql8.0+VS2019连接数据库相关的知识,希望对你有一定的参考价值。
QT6.0+mysql8.0+VS2019连接数据库
由于法律问题QT不在提供mysql驱动,因此必须自己编译,找了很久没发现QT6的编译说明,特此记录,注意以下目录均为本机目录,需要根据自己的安装路径找到对应目录。
QT源码下载及配置,可以单独下载也可以启动安装工具增加,已安装请忽略。
QT源码安装好后转到mysql驱动目录:C:\Qt\6.0.0\Src\qtbase\src\plugins\sqldrivers\mysql
双击mysql.pro使用Qt Creator打开。
安装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安装;
在打开的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文件中下面目录,根据实际找到的目录配置
链接库拷贝
根据编译信息将编译完成的链接库拷贝到QT目录链接库目录为:C:\plugins\sqldrivers,根据源代码修改盘符。QT目录为:C:\Qt\6.0.0\msvc2019_64\plugins\sqldrivers
拷贝mysql.dll链接库到QT路径,mysql路径为和之前添加的lib路径在一起:C:\Program Files\MySQL\MySQL Connector C 6.1\lib拷贝到QT的路径为:C:\Qt\6.0.0\msvc2019_64\bin
编译完成
连接错误:”caching_sha2_password“
原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,解决方案:把mysql用户登录密码加密规则还原成mysql_native_password方法:
转到mysql目录下打开cmd,我的目录为C:\Program Files\MySQL\MySQL Server 8.0\bin
登录mysql,并输入password:
mysql -u root -p
修改账户密码加密规则并更新用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码刷新权限并重置密码
FLUSH PRIVILEGES; #刷新权限
单独重置密码,改为自己密码
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连接数据库的主要内容,如果未能解决你的问题,请参考以下文章
PyCharm Community 2019.2 连接MySQL8.0 时区不同步的解决
(Win10)Java,Maven,Tomcat8.0,Mysql8.0.15安装与环境配置,以及IDEA2019.3使用JDBC连接MySQL创建JavaEE项目