Qt编译mysql驱动-总结-程序员宅基地

技术标签: Qt  qt  mysql  数据库  

前言

由于本人下载的是qt5.14.2的版本,近期项目需要用到mysql,但是qt5.12.3是最后提供mysql数据库插件的版本,以后都需要自己编译对应的mysql数据库插件。让我重新下载qt显然不可能,这也就导致我接下来痛苦n天。若有怕麻烦的小伙伴也可以自己下载以前的qt版本,可以不用看下文了。

通过qt编译MySQL驱动

打开mysql.pro文件

  • 如果你在下载qt时已经选择了下载源码,那么恭喜你可以直接打开mysql对应的.pro文件进行编译。
  • 如果你在下载qt时没有下载源码也不用担心,链接: qt下载然后选择与你自己qt版本相对于的源码打开解压后即可找到mysql的源码。在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述 这里的E:\QT是你自己安装的路径,只要后面的路径一样就好。你第一次打开应该只有阴影部分的文件,然后打开.pro文件就可以进入qt。 - 如果你此时直接选择mingw套件进行构建,那么将会给你报好多错误,解决这些问题我们需要对pro文件进行如下修改 -

修改pro文件

在这里插入图片描述
1.如果不注释第六行,编译的时候就会出现一个错误“mysql is not defined”
2.添加mysql的include文件夹,和第11行引用mysql安装路径lib的libmysql.lib静态库
3.第12行将我们生成的MYSQL驱动库放入指定位置

编译驱动

因为qt中用msvc需要进行一些配置,所以我先以qt默认的mingw来生成驱动
做完这些修改后,就可以重新用mingw进行构建(注意数据库的版本位数要和编译器(构建套件kit)的版本位数一致),可以使用mysql -V命令查看自己的数据库位数。我这里因为是64为因此我选择的是mingw64位的编译器.。在这里插入图片描述

  • 编译成功后,你就会在程序运行目录的上一级目录下发现生成三个文件夹(有些可能是在该盘符下的根目录,比如我这里有可能是在E:\),在这里插入图片描述

  • 然后我们打开plugins这个文件夹将下图两个文件拷贝到你的相应的构建套件的sqldrivers目录下,网上有些说会生成qsqlmysql.dll和qsqlmysqld.dll将这两个拷贝到aqldrivers目录下。,但我这里没生成qsqlmysqld.dll,如果你和我一样,拷贝这两个也可以。在这里插入图片描述
    在这里插入图片描述

  • 在你的mysql安装路径找到mysql的libmysql.dll和libmysql.lib拷贝到相应的编译套件的bin目录下。在这里插入图片描述
    在这里插入图片描述

测试效果

  • 新建一个qt项目,记得勾选sql模块,我这里继承的是QMainWindow,这个不重要继承什么窗口类都不重要,你也可以继承QWidget等,然后将main.cpp修改如下
#include "mainwindow.h"
#include <QApplication>
#include <QSqlDatabase>
#include<qmessagebox.h>
int main(int argc, char *argv[])
{
    
    QApplication a(argc, argv);
//    MainWindow w;
//    w.show();
      QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
      db.setDatabaseName("school");//数据库名
      db.setHostName("127.0.0.1");//主机名
      db.setUserName("root");//用户名
      db.setPassword("xxxxxxxx");//密码
      db.setPort(3306);//端口号

      if (db.open())
      {
    
          QMessageBox::warning(NULL, "Tip", "Succed", QMessageBox::Yes);
          return 0;
      }
      else {
    
          QMessageBox::critical(0, "Tip", "Pass", QMessageBox::Yes);
          return -1;
      }
      return a.exec();
    return a.exec();
}
  • 如果你运行程序出现,那么恭喜你你已经成功了,可以通过qt的mingw编译套件连接数据库,并为所欲为了。在这里插入图片描述

VS编译mysql驱动

  • 上面步骤完成后,如果你想用vs来编写qt项目,你会发现,无法连接数据成功,这是因为vs用的是msvc编译套件,而我们刚刚只是生成了mingw的mysql驱动。因此我们需要按上面步骤在生成msvc的驱动并将其拷贝到对应的msvc的sqldrivers目录。因为本人配置msvc一直出错一时无法解决所以我用vs来生成所需的msvc的mysql驱动。如果你的qt msvc已经配置好了并可以生成驱动就不需要往下面看了。
  • 首先在开始菜单找到你的QT msvc打开输入命令qmake -tp vc mysql.pro生成vc++ projiect文件,要以vs的方式打开这个文件。
    在这里插入图片描述
    如果你在qmake时出现这种错误你可以将mysql文件夹下的所有文件都删除,只保留原来的六个文件在重新qmake就会成功。在这里插入图片描述

在这里插入图片描述

  • 打开qsqlmysql.vcxproj后,我们生成解决方案就可以得到mysql的驱动了。然后按照mingw的步骤将相应的文件拷贝到对应的msvc目录下就可以了。
  • 但是用vs编译生成的驱动用debug模式生成的只能在debug模式下使用,如果想在release下也可用,我们就需要在release模式下也生成以下解决方案,然后再将生成的驱动库放到msvc里面。
    在这里插入图片描述
    在这里插入图片描述

可能出现的问题解决方法

问题一 如果你出现了error MSB8036: The Windows SDK version xxx was not found问题或者报了一大堆的无法打开包文件等等的错误,

你可以右键解决方案选择重定目标解决方案,改变你的windows sdk版本。在这里插入图片描述
在这里插入图片描述

  • 如果这样还是报错的话,你选择vs中的工具->获取工具和功能。会进入到vs的安装界面,点击修改进入选择组件界面选择最新的windows sdk就好了不需要向我一样选择那么多。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 如果你第一次打开安装界面发现的vs Windows sdk最新版已经有对钩了,你需要将对钩取消,你会发现所需磁盘变为负数,然后点击修改,等修改完后,再重新执行上述步骤,上面的问题就会消失。(这是因为你的windows sdk可能已经被破坏了,你需要先将其卸载后再重新下载在这里插入图片描述

出现无法定位程序输入点,找不到某个库

  • 如果你在进行测试连接数据库(不是在编译驱动)的时候,你的程序出现无法定位程序输入点的问题或者找不到某个库,那么可能是你的你需要设置系统环境变量,让msvc的放在mingw前面如下
    在这里插入图片描述

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_47193458/article/details/125968711

智能推荐

【NLP公开数据集】FUNSD dataset 数据集介绍-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏2次。数据集介绍一个可用于FUNSD(噪声很多的扫描文档)上进行表单理解的数据集。这里的表单理解是指对表单中的文本内容进行抽取,并生成结构化数据。数据集包含199个真实的、完全注释的、扫描的表单。文档有很多噪声,而且各种表单的外观差异很大,因此理解表单是一项很有挑战性的任务。该数据集可用于各种任务,包括文本检测、光学字符识别、空间布局分析和实体标记/链接。第一个具有完整注释的公共数据集,可用..._funsd dataset

专题13:一文让你彻底明白python中的进程、线程、协程、GIL_进程/线程/协程区别。python的gil机制了解吗?讲一讲为什么有gil-程序员宅基地

文章浏览阅读279次。文章内容可能会比较长,针对每一部分的内容,建议深入了解,我之所以把这些知识点放在一起解析,\color{red}{文章内容可能会比较长,针对每一部分的内容,建议深入了解,我之所以把这些知识点放在一起解析,}文章内容可能会比较长,针对每一部分的内容,建议深入了解,我之所以把这些知识点放在一起解析,一是想比较清晰的整理出来,遇到问题不用到处找,二是坚持学完python中的这一部分知识,不要只是一知半解。\color{purple}{ 一是想比较清晰的整理出来,遇到问题不用到处找,二是坚持学完python中的这_进程/线程/协程区别。python的gil机制了解吗?讲一讲为什么有gil

AndroidKeyStore管理及实现-基于源码7.1.1.r13_android keystore_cli_v2-程序员宅基地

文章浏览阅读3.4k次。一、 Java层代码实现及调用1. Apps接口调用—证书导入apk(1) 代码路径为:packages/apps/Settings/src/com/android/settings/CredentialStorage.java(2) 功能为UNLOCK/ INSTALL/ RESET通过调用android.security.keystore_android keystore_cli_v2

十个炫丽的表白模板源码,整合成一个完整系统可修改文字,可统计人数,经典的爱情告白,万能告白模板,胜过鲜花表白,程序员的特殊表白方式说——我爱你(520)——html、js、css、jQuery_告白软件页面模版-程序员宅基地

文章浏览阅读3.8k次,点赞13次,收藏34次。十个炫丽的表白模板源码,整合成一个完整系统可修改文字,可统计人数,经典的爱情告白,万能告白模板,胜过鲜花表白,程序员的特殊表白方式说——我爱你(520)——html、js、css、jQuery。一、效果展示点击下方视频,可播放一些效果。 特别的节日给特别的你,万能告白模板,胜过鲜花表白,程序员的特殊表白方式说—..._告白软件页面模版

【C++】STL 标准模板库-程序员宅基地

文章浏览阅读320次,点赞5次,收藏6次。STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

JavaWeb_15_01_Response_java web api responsevo-程序员宅基地

文章浏览阅读156次。1 Response—设置响应信息方法介绍1.1 设置响应行1、格式: HTTP/1.1   200  OK2、设置状态码:void setStatus(int 状态码)1.2 设置响应头void setHeader(String name,Object value)1.3 设置响应体使用步骤:1、获取输出流2、使用输出流,将数据输出到客户端浏览器字符输出流:PrintWriter getWriter()字节输出流:ServletOutputStream getOu_java web api responsevo

随便推点

boot jersey_Jersey和Spring Boot入门-程序员宅基地

文章浏览阅读267次。boot jersey 除了许多新功能,Spring Boot 1.2还带来了Jersey支持。 这是吸引喜欢标准方法的开发人员的重要一步,因为他们现在可以使用JAX-RS规范构建RESTful API,并将其轻松部署到Tomcat或任何其他Spring's Boot支持的容器中。 带有Spring平台的Jersey可以在mico服务的开发中发挥重要作用。 在本文中,我将演示如何使用Sprin..._jersey框架与springboot区别

CTF——PHP审计——变量覆盖_foreach($_get as $key => $value)-程序员宅基地

文章浏览阅读3.9k次,点赞12次,收藏36次。一,变量覆盖漏洞参考:https://www.cnblogs.com/xiaozi/p/7768580.html通常将可以用自定义的参数值替换原有变量值的情况称为变量覆盖漏洞。经常导致变量覆盖漏洞场景有:1,$$使用不当,2,extract()函数使用不当,3,parse_str()函数使用不当,4,import_request_variables()使用不当,5,开启..._foreach($_get as $key => $value)

博客项目(三)——Mapper接口与其映射_piblic interface articlemapper-程序员宅基地

文章浏览阅读717次。一.接口与映射文件未学习MyBatis之前,连接数据库是使用JDBC,执行SQL语句都是使用Statement 和 PreparedStatement这两个对象。在学习了MyBatis之后,学会接口对应映射文件这种方法。1.1Article1.1.1接口package com.test.ssm.blog.mapper;import com.test.ssm.blog.ent..._piblic interface articlemapper

Debezium 从oracle抓取数据到kafka_oracle通过debezuim 同步到kafka confluent-程序员宅基地

文章浏览阅读3.6k次,点赞6次,收藏27次。环境操作系统版本[root@localhost kafka_2.13-2.8.0]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@localhost kafka_2.13-2.8.0]# uname -r3.10.0-862.el7.x86_64glibc版本[root@localhost kafka_2.13-2.8.0]# rpm -qa|grep glibcglibc-common-2.17-2_oracle通过debezuim 同步到kafka confluent

Android常用面试题(一)_android面试题 属性动画-程序员宅基地

文章浏览阅读610次。1、 android 中的动画有哪几类,它们的特点和区别是什么? 参考答案: 有两种,一种是 Tween(补间) 动画、还有一种是 Frame(帧) 动画。Tween 动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种 Frame 动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影。2.请简述Handler的机制原理_android面试题 属性动画

SAPUI5 (4) - Input组件_sap is_input格式-程序员宅基地

文章浏览阅读938次。学习目标:掌握Input一般组件用法学习内容:1、 Feed Input2、 Input List Item3、 Date Time Input4、 Mask Input5、 Multi Input代码如下:OverView.view.xml// An highlighted block <App> <pages> <Page title="OverView"> <VBox> <Panel he_sap is_input格式

推荐文章

热门文章

相关标签