Qt+MySql开发笔记:Qt5.9.3的msvc2017x64版本编译MySql8.0.16版本驱动并Demo连接数据库测试

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mysql驱动版本msvc2015x32版本调好, mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5.9.3,于是本篇编译mysql驱动的msvc2017x64版本,满足当前的特定需求,这次过程有点费劲,可能是Qt的版本低于Qt5.12,继续无保留分享出来。  本篇主要描述Qt5.9.3 msvc2017x64 + mysql8.0.16的驱动编译过程。

前言

  mysql驱动版本msvc2015x32版本调好, mysql的mingw32版本的驱动上一个版本编译并测试好,有些三方库最低支持vs2017,所以只能使用msvc2017x64,基于Qt5.9.3,于是本篇编译mysql驱动的msvc2017x64版本,满足当前的特定需求,这次过程有点费劲,可能是Qt的版本低于Qt5.12,继续无保留分享出来。

  本篇主要描述Qt5.9.3 msvc2017x64 + mysql8.0.16的驱动编译过程。


编译环境

Qt5.9.3 msvc2017x64

  安装得时候记得要勾选上源码

mysql-installer-community-8.0.16.0

  

下载数据库

  https://downloads.mysql.com/archives/community/

  


编译mysql驱动库(Qt5.9.3+mysql8.0.16)

步骤一:安装Qt5.9.3勾选msvc2017x64版本。

  

  其他过程略。

步骤二:下载数据库64位驱动运行程序并解压

  下载数据库运行包文件。(注意:这里要注意跟目标机器安装的版本要一致)。

  下载地址:https://dev.mysql.com/downloads/connector/cpp

  (这里查看“入坑一”)

  直接越过了下载了,因为下载下来的目前编译都有问题

  数据库安装在本地,直接通过本地了:

  

步骤三:打开qt中自带的mysql源码工程

  

  使用QtCreator打开

  

  这里要去掉shadow,否则会其他错误,参考“入坑一”和“入坑二”:

  

  

  

步骤四:qmake并且build构建

  

  

  (这里要是报错就回过去看步骤三以及入坑一二)

  

步骤五:替换插件的mysql库

  

步骤六:将数据库的libmysql.dll拷贝到bin目录

  将mysql的lib下的libmysql.dll拷贝到qt的msvc2017x64的bin目录下,而且打包软件的时候也要带上。

  这里是直接将之前lib对应的libmysql.dll拷贝进qt的bin和应用部署文件夹下:

  

  (PS:打包发布时windeployqt不会主动拷贝,是需要手动复制过去)

步骤七:编译应用连接测试

  将应用从odbc切入mysql驱动编译数据库的工程:

  

  这里是因为mysql8修改了加密方式,直接使用mysql驱动的话要修改加密方式,修改方式主要是部署数据库的时候修改,可以登录数据库然后做如下操作:

  

  然后应用登录测试

  

  若还需要远程登录,则继续步骤八和九:

步骤八:配置数据库账号允许远程操作(这一步是之前mingw32的测试步骤,为了方便直接放这)

  这是因为账号不被允许远程登录,所以需要修改数据库用户的配置,让其允许远程登录。

  修改用户被允许远程登录,先使用mysql控制端输入密码登录,然后操

作:

use mysql;
select host,host from user;
update user set host = ‘%’ where user = ‘root’;
select host,host from user;

  这时候,还是不行,需要强行刷新以下

flush privileges;

  

  

  然后成功:

  

  至此,Qt5.9.3 msvc2017x64 + mysql8.0.16数据库连接驱动编译完成。

步骤九:数据库的远程操作工具连接(这一步是之前mingw32的测试步骤,为了方便直接放这)

  使用远程工具测试,发现出错:

  

  这是因为8.0之后mysql更改了密码的加密规则,目前的客户端连接软件还不支持Mysql8新增加的加密方式caching_sha2_password,所以需要修改用户的加密方式,将其改回旧加密验证方式。

  先登录mysql命令行,执行以下,主要是youPassword要替换为你使用远程登录的账户密码:

alter user 'root'@'%' identified by 'youPassword' password expire never;
alter user root identified with mysql_native_password by 'youPassword';
flush privileges;

  

  


入坑

入坑一:编译报错无法打开“无法打开输入文件“D:\mysql-connector-c-6.1.11-winx64\lib.ob”

问题

  编译错误,无法通过

  

尝试解决

  多方查找,定位在提供的库的版本上,也不行。

  本次版本,最后尝试直接从mysql安装文件夹里面拿,可以通过,但是也没有看到根录下文件(后来检查路径才确认未生成到根目录下)。

  以下截图过程可参考:

  

  

  

  然后去掉shadow,成功了:

  

解决

  去掉shaodw,路径查看“入坑二”。

入坑二:没有编译输出

问题

  按照之前mingw32编译的没找到输出

原因

  有些配置文件,所以直接全部构建,来看生成的文件夹

  

  发现是路径问题。

解决

  找到到对应的路径,生成了。

  

  综合一和二,还有尝试下载驱动库的编译器vc版本问题,这里解决差不多花了大半天了去尝试、摸索然后逐步排除各种问题。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
SQL Oracle 关系型数据库
实时计算 Flink版操作报错合集之连接器换成2.4.2之后,mysql作业一直报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
12 3
|
2天前
|
NoSQL Shell MongoDB
NoSQL数据使用指令和引擎连接数据库实例
【5月更文挑战第8天】本文介绍了MongoDB的本地使用和常用操作,包括通过mongo shell连接数据库、显示数据库和集合,以及副本集设置。最后提到了MongoDB的日志功能和顶点集的使用,如capped collection的创建和管理。
22 3
|
3天前
|
Java 数据处理 流计算
实时计算 Flink版产品使用合集之可以通过JDBC连接器来连接Greenplum数据库吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
12 1
|
4天前
|
SQL 缓存 Java
实时计算 Flink版产品使用合集之flink-connector-mysql-cdc 和 flink-connector-sqlserver-cdc 这两个CDC连接器只能选择其中一个使用吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
24 0
|
3天前
|
关系型数据库 MySQL API
实时计算 Flink版产品使用合集之可以通过mysql-cdc动态监听MySQL数据库的数据变动吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
20 0
|
5天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
25 0
|
5天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
19 0
|
5天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
23 0
|
5天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
27 0
|
5天前
|
SQL 关系型数据库 Serverless
阿里云关系型数据库RDS
阿里云关系型数据库RDS
19 2

推荐镜像

更多