Qt编译mysql驱动-总结

文章目录

  • 前言
  • 通过qt编译MySQL驱动
    • 打开mysql.pro文件
    • 修改pro文件
    • 编译驱动
    • 测试效果
  • VS编译mysql驱动
    • 可能出现的问题解决方法
      • 问题一 如果你出现了error MSB8036: The Windows SDK version xxx was not found问题或者报了一大堆的无法打开包文件等等的错误,
      • 出现无法定位程序输入点,找不到某个库

前言

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

通过qt编译MySQL驱动

打开mysql.pro文件

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

修改pro文件

Qt编译mysql驱动-总结_第4张图片
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:\),Qt编译mysql驱动-总结_第5张图片

  • 然后我们打开plugins这个文件夹将下图两个文件拷贝到你的相应的构建套件的sqldrivers目录下,网上有些说会生成qsqlmysql.dll和qsqlmysqld.dll将这两个拷贝到aqldrivers目录下。,但我这里没生成qsqlmysqld.dll,如果你和我一样,拷贝这两个也可以。Qt编译mysql驱动-总结_第6张图片
    Qt编译mysql驱动-总结_第7张图片

  • 在你的mysql安装路径找到mysql的libmysql.dll和libmysql.lib拷贝到相应的编译套件的bin目录下。Qt编译mysql驱动-总结_第8张图片
    Qt编译mysql驱动-总结_第9张图片

测试效果

  • 新建一个qt项目,记得勾选sql模块,我这里继承的是QMainWindow,这个不重要继承什么窗口类都不重要,你也可以继承QWidget等,然后将main.cpp修改如下
#include "mainwindow.h"
#include 
#include 
#include
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编译套件连接数据库,并为所欲为了。Qt编译mysql驱动-总结_第10张图片

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的方式打开这个文件。
    Qt编译mysql驱动-总结_第11张图片
    如果你在qmake时出现这种错误你可以将mysql文件夹下的所有文件都删除,只保留原来的六个文件在重新qmake就会成功。在这里插入图片描述

Qt编译mysql驱动-总结_第12张图片

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

可能出现的问题解决方法

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

你可以右键解决方案选择重定目标解决方案,改变你的windows sdk版本。Qt编译mysql驱动-总结_第15张图片
Qt编译mysql驱动-总结_第16张图片

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

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

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

在这里插入图片描述

你可能感兴趣的:(Qt,qt,mysql,数据库)