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

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

时间:2023-04-26 12:22:26浏览次数:59  
标签:msvc2017x64 Qt 数据库 编译 版本 mysql 入坑

前言

  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版本问题,这里解决差不多花了大半天了去尝试、摸索然后逐步排除各种问题。

标签:msvc2017x64,Qt,数据库,编译,版本,mysql,入坑
From: https://www.cnblogs.com/qq21497936/p/17355255.html

相关文章

  • 【FAQ】关于JavaScript版本的华为地图服务Map的点击事件与Marker的点击事件存在冲突的
    一. 问题描述创建地图对象,并添加marker标记,对map和marker均添加了点击事件;<body><script>functioninitMap(){//创建地图对象constmap=newHWMapJsSDK.HWMap(document.getElementById('map'),{center:{lat:39.36322,lng:......
  • Yuzuki Lizard 全志V851S开发板 –移植 QT5.12.9教程
    移植QT5教程(此教程基于docker版V851S开发环境)dockerpullregistry.cn-hangzhou.aliyuncs.com/gloomyghost/yuzukilizard编译依赖apt-getinstallrepogitgcc-arm-linux-gnueabihfu-boot-toolsdevice-tree-compilermtools\partedlibudev-devlibusb-1.0-0-devpython......
  • jdk环境配置已经版本切换
    下载安装jdk到电脑盘,两个版本要下载到一个盘里面下安装好后右击我的电脑找到高级系统设置,点开环境变量新建环境变量总计环境变量一共添加四个其中java8和java11是是选择文件路径JAVA_HOME是用来选择连个jdk版本环境变量设置好之后双击path双击打开把java文件路径下移到最下面然后......
  • Google浏览器 查看http版本是1.1还是2.0
    1、打开网页2、F12进入开发者模式3、找到请求4、找到请求头5、找到ResPonseHeather点击Viewparsed......
  • php 版本号对比,1.0.5和1.15.0
    $version1='1.0.5';$version2='1.15.0';//自定义比较函数functioncompare_versions($v1,$v2){$ver1=explode('.',$v1);$ver2=explode('.',$v2);//将每个版本号中的字符串转换为整数$ver1=array_map('intval&......
  • 使用Qt Designer生成的两个UI文件,实现在主界面中点击后弹出另一个界面
    QtDesigner生成的ui代码policy.py#Formimplementationgeneratedfromreadinguifile'policy.ui'##Createdby:PyQt6UIcodegenerator6.4.2##WARNING:Anymanualchangesmadetothisfilewillbelostwhenpyuic6is#runagain.Donotedit......
  • PySide6、PyQt6、ui文件转py文件、Qt Designer 使用
    QT官网:https://www.qt.io/zh-cn/develop1、PySide6、*PyQt6、PyQt5*PySide6、PySide2、PyQt5都是基于Qt库,Qt是一组C++库和开发工具,包括图形用户界面、网络、线程、正则表达式、SQL数据库、SVG、OpenGL、XML、用户和应用程序设置、定位和定位服务、短程通信(NFC和蓝牙)......
  • 编译部署LNMP-php8.1.18版本
    由于mysql编译会非常耗费资源,故咱们这里不做介绍,只介绍nginx的编译、php的编译以及nginx和php的联动,至于mysql如何接入,需要看具体业务,在LNMP中mysql是相对独立的,不需要特别的配置编译安装nginx新建www用户groupaddwwwuseradd-s/sbin/nologin-gwwwwww安装必要依赖yum......
  • 在jupyter notebook中切换PY版本
    首先,确保已经成功安装完了Condacondaenvlist #查看当前已经创建的py环境condaactivatepaddle242#切换到需要使用的py环境pipinstallipykernel python-mipykernelinstall--user--name<PY的环境名称>--display-name<Jupyter的环境名称>example:python-mip......
  • Android JAVA连接MQTT,以及常见问题
    本文介绍如何使用Android(JAVA)客户机连接MQTT服务器第一步先引入MQTT在 build.gradle添加以下:dependencies{implementation'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'}接下来演示如何连接创建MQTT客户机类 MqttConnect.classpublicclassMqtt......