【QT】QT编译链接 msql 数据库

QT编译链接数据库

注意! :我的方式中建议提前下载好Listary这个搜索软件

版本信息:

  • QT 5.15.0
  • mysql 5.7.34

踩了两晚的坑得到下面的总结:

  1. 找到下面路径的mysq.pro文件,用 QT 打开(也有教程说可以用visual studio的命令行工具打开,这里我认为都用IDEA打开很多报错提示会更加的清晰)
bash 复制代码
D:\QT\Installation\5.15.0\Src\qtbase\src\plugins\sqldrivers\mysql #根据自己的QT版本路径做修改 数字后面的内容是固定的

打开后修改mysql.pro文件:

在打开mysql.pro之后很多教程是让我们直接进行修改就行了,但是很多人修改后找不到这找不到那的,这里我在编译时做了一个前提操作就是把MinGWMSVC的编译方式都加上,步骤可能繁琐但是容错率会高很多,原理就不做解释了(其实是我也解释不清)

注意这里的编译设置这很重要 ,有些人找不到qsqlmysql.dll.debug的原因可能就是因为这里设置的是MSVC版本的编译选项!,只有MinGW的编译器能编译出qsqlmysql.dll.debug

这里有人可能会没有这多选项,那可能是你没有装QT的这些版本功能,可以在QT目录下找到MaintenanceTool.exe 然后对应版本下载安装(我直接all in):

如果没做这一步或者忘了,可以在这里进行修改添加:

之后在这里进行灵活切换,切换的目的后面解释,这里以MinGW为例:

然后就可以进进行修改mysql.pro文件了:

bash 复制代码
TARGET = qsqlmysql

HEADERS += $$PWD/qsql_mysql_p.h
SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp

# QMAKE_USE += mysql	# 这里要注释掉

OTHER_FILES += mysql.json

LIBS+="D:/JAVA/MySQL/mysql/lib/libmysql.lib"	# 根据自己的mysql路径做修改
INCLUDEPATH+="D:/JAVA/MySQL/mysql/include"	# 根据自己的mysql路径做修改
# DESTDIR = D:/QT/Installation/5.15.0/Src/qtbase/src/plugins/sqldrivers/mysql/lib

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)

DESTDIR:#指定编译后的lib生成路径,这里不知道为什么我的不会被指定到这里就没用,后面说一下我是怎么解决的。

然后就可以进行构建了

构建可能会遇到一个报错说qtsqldrivers-config.pri这个文件找不到,你可以在mysql文件夹同级目录D:\QT\Installation\5.15.0\Src\qtbase\src\plugins\sqldrivers下自己创建一个,并加上下面内容:

bash 复制代码
QT.sqldrivers.enabled_features =
QT.sqldrivers.disabled_features =
QT.sqldrivers.QT_CONFIG =
QT.sqldrivers.exports =
QT.sqldrivers_private.enabled_features = sql-sqlite sql-mysql
QT.sqldrivers_private.disabled_features = sql-db2 sql-ibase sql-oci sql-odbc sql-psql sql-sqlite2 sql-tds system-sqlite
QT.sqldrivers_private.libraries =
  1. 前面说了有些人可能在mysql.pro中设置了DESTDIR也没用生效,这时候就可以用到提前准备好的Listary软件去搜qsqlmysql.dll(我的是在D:\QT\Installation\5.15.0\mingw81_64\qtbase\src\plugins\sqldrivers\plugins\sqldrivers
  • 可以根据时间排序找到刚刚编译成功的那个,但一定要注意,这个应该是你先前选择的编译版本的路径,比如我先用的MinGW这里生成的就在 QT版本的 mingwxxx_64 下,后面使用MSVC编译就会生成在 QT版本的 msvcxxx_64 下(如绿色划线)。注意这里是默认路径,可能会因为版本等原因生成的地方不同,所以我才使用Listary去搜,根据生成时间去锁定总没错,这里为了避免混淆 建议先走一遍MinGW的之后如果不成功再用MSVC的方式进行处理
  • 如果你是做过很多次依然没成功,此时搜索搜索到很多个地方都有有 很乱,我建议可以一个一个的全部删除掉,重新编译再进行下一步,这样方便你理清思路。

找到之后右击打开到文件夹,把qsqlmysql.dllqsqlmysql.dll.debug复制黏贴到这个目录下(我的是在:D:\QT\Installation\5.15.0\mingw81_64\plugins\sqldrivers

  • 一定要注意路径选择,我使用MinGW编译的,最后也一定是要放到MinWG的版本路径下\plugins\sqldrivers
  • 有些人会发现自己的生成目录里怎么没有qsqlmysql.dll.debug这个文件,这就要看你之前用QT编译时是不是用的MinGWxx_64版本,使用这个版本默认会生成这两个文件的(不过生成的路径不一定是这里,但可以通过 Listary 去搜,加上生成时间去锁定)
  1. 然后就可以去找到你的mysql/lib目录下的libmysql.dll动态库文件,将它黏贴到mingwxx_xx的bin目录下

至此基本就完成了

注意

  • 从始至终我都是在围绕着MinGW,用MinGW去编译,生成的两个文件(只有MinGW能生成qsqlmysql.dll.debug文件)在MinGW下的\qtbase\src\plugins\sqldrivers\plugins\sqldrivers,黏贴到MinGW下的\plugins\sqldrivers 中。最后的动态库也是黏贴到MinGW的bin目录下,整个过程都和最开始的编译设置是强相关的!
  1. 我是在被逼疯了的情况下两个同时进行的,我不知道单一做个MinGW行不行,在用MinGW编译完成之后我又用MSVC进行了编译,操作方式就是在这里进行切换:

之后的步骤都大同小异,我就不做介绍了,只是有下面几点不同:

  • MinGW 路径中的 mingwxx_xx 换成了 msvcxxxx_xx,这里的和你在QT项目里选择的编译器相关。
  • 在生成的文件中不在有 qsqlmysql.dll.debug ,取而代之的是多了个qsqlmysqld.dll 但是咱只管能运行,我把所有同一时间和 qsqlmysql.dll(这里是被MSVC版本的编译器编译的!) 一起在一个文件夹下生成文件都黏贴到 msvc2019_64\plugins\sqldrivers 下了。包成功的!
  1. 最后来个测试代码

用QT创建一个qmake的项目,在 *.pro 中添加:

cpp 复制代码
QT       += core gui sql
QT       += sql

main.cpp

cpp 复制代码
#include "mainwindow.h"
#include <QApplication>
#include <QLabel>
#include <QPushButton>
#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>
#include <QSqlError>
#include <QDebug>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QTextStream>
#include <stdio.h>

bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("qtqq");
    db.setUserName("root");
    db.setPassword("123456");
    db.setPort(3306);			//端口
    bool ok = db.open();
    if (ok)
    {
        qDebug() << "连接成功" ;
    }
    else
    {
        qDebug() << "连接失败" ;
    }
    return true;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    if (!createConnection())
        return 1;
    return a.exec();
}

哦对 可能还有一个问题,就是如果你有多个版本的QT,要注意系统环境中的当期要使用的版本路径的优先级是不是高于其他版本。

👏最后祝各位都能少遇BUG,事事顺利

相关推荐
冒泡的肥皂1 小时前
MVCC初学demo(一
数据库·后端·mysql
.Shu.2 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
薛晓刚5 小时前
当MySQL的int不够用了
数据库
SelectDB技术团队5 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光6 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12016 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
染落林间色6 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
数据库·sql
颜颜yan_6 小时前
企业级时序数据库选型指南:从传统架构向智能时序数据管理的转型之路
数据库·架构·时序数据库
lichenyang4536 小时前
管理项目服务器连接数据库
数据库·后端
沙振宇6 小时前
【数据库】通过‌phpMyAdmin‌管理Mysql数据
数据库·mysql