QT连接MySQL

前言 

QT连接MySQL操作比较繁琐,中间变数很多。本人练习时长两天半,中间大大小小各种坑,截止目前亲测排除一些,还有一些有待研究。我把过程写下来希望帮到别人,欢迎交流讨论。

环境

Windows 10 家庭中文版,64位,已装VS2017,已装WindowsSDK

Qt Creator 4.15.0 Based on Qt 5.12.2(MSVC 2019,64 bit)

MySQL 8.0.31 winx64

正文

QT连接MySQL有两种方式,一种是用QT打开自带的工程,稍加改动编译出dll和lib,再手动放在对应位置;另一种是通过ODBC软件连接。我用的是前者,后者也试过,但存在32位64位的问题,后文细说。

查看有无驱动

一、打开MySQL,并创建一个库,

二、打开QT,新建一个工程,做如下修改:

         (一) .pro文件中,添加如下两句:

QT += sql
QT += widgets

        (二). mainwindow.h文件中, 添加头文件:

#include 
#include 
#include 
#include 

        (三). main.cpp文件中,添加如下代码:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");  //连接本地主机
    db.setPort(3306);
    db.setDatabaseName("数据库名");
    db.setUserName("用户名");
    db.setPassword("密码");
    bool ok = db.open();
    if (ok){
        QMessageBox::information(this, "infor", "link success");
    }
    else {
        QMessageBox::information(this, "infor", "link failed");
        qDebug()<<"error open database because"<

坑1:csdn有些文章里面的代码粘过来会报错,所以一定要引全头文件

插一句,因为我是重装了QT之后又来尝试,所以这里可能会出这个问题:编译后报错error: cannot open C:\Users\AppData\Local\Temp\main.obj.5136.0.jom for write,在csdn查到了这位作者的文章,圆满解决QT编译时出现:error: cannot open C:\Users\AppData\Local\Temp\main.obj.5136.0.jom for write_mikasoi的博客-CSDN博客

如果提示failed,输出

QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

那就是还没有驱动。

方式一:QT编译dll

(一)打开mysql.pro,位置在D:\QT\5.12.11\Src\qtbase\src\plugins\sqldrivers\mysql

坑2:安装QT时要选中source,否则找不到该工程

(二)这里有些混乱,我如实记录亲自测试的结果:

        1.QT编译器64位,MySQL64位:可行,将D:\mysql-8.0.31-winx64\lib中的libmysql.dll和libmysql.lib文件复制到D:\QT\5.12.11\msvc2017_64\bin中,然后继续第三步。但请注意,此处有个最大却最不起眼的坑!

坑3:有文章说位数不对应的话需要下Connector,复制其中lib下的libmysql.dll和libmysql.lib文件到D:\QT\5.12.11\msvc2017_64\bin中。但其实MySQL文件夹lib里直接就有,不需要下载。而且亲测使用下载的dll和bin,不会影响编译,却影响QT和MySQL的连接,本人在这步浪费了很长很长时间,最后才发现尽信书确实不如无书。猜测是版本不对,官网最新的只有6.1.11,时间已经是2017-07-18的,MySQL里自带的是2022-09-13的。另外切记如果要下,就下C的,不能用C++的。如果想尝试,下载地址如下:

下载地址:MySQL :: Download MySQL Connector/C (Archived Versions)

        2.QT编译器32位,MySQL32位:32位MySQL似乎安装不正确,没能进行进一步尝试。

        3.QT编译器32位,MySQL64位:32位编译器编不过mysql.pro,会报错LNK2019,按照他人说法可以靠清缓存来解决,亲测无效,且容易把QT搞坏

坑4:如果是64位系统,尽量装64位软件

        一大波小坑来袭……

坑5:QT Creator是32位64位都没有关系,可以装不同的编译器,并不需要大费周章地卸载重装

坑6:有人说MySQL路径存在“.”或空格会对编译有影响,我的路径中有“.”和“-”,亲测一切正常。实际上这个文件夹名字是官网下载自带的,不能改,改了MySQL会出问题,即使是免安装版

坑7:如果实在需要用32位编译器,64位电脑上一定报错,亲测笔记本和台式都报过。如果想通过清空缓存来尝试消告警,建议改名而不是删除,直接删很容易把qt搞坏。缓存路径如下:

        C:\Users\86183\AppData\Local\QtProject

        C:\Users\86183\AppData\Roaming\QtProject

坑8:有人说编译器要选MSVC,不能用MinGW,这个没有尝试,我直接用MSVC

(三)接下来做如下修改:

        1.mysql.pro

                1)QMAKE_USE += mysql前面加个#,注释掉;

                2)再添加以下三句,原有的话就改为以下三句:

                INCLUDEPATH += D:/mysql-8.0.31-winx64/include
                LIBS += D:/mysql-8.0.31-winx64/lib/libmysql.lib
                DEPENDPATH  = ../mysql/mysqlDll

TARGET = qsqlmysql

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

#QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin

include(../qsqldriverbase.pri)

INCLUDEPATH += D:/mysql-8.0.31-winx64/include

LIBS += D:/mysql-8.0.31-winx64/lib/libmysql.lib

DEPENDPATH  = D:\QT\5.12.10\Src\qtbase\src\plugins\sqldrivers\mysql\mysqlDll

        2.qsqldriverbase.pri

                1)include()括号内的所有内容换成configure.pri的绝对路径

QT  = core core-private sql-private

# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)
PLUGIN_TYPE = sqldrivers
load(qt_plugin)

DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

(四)重新编译

        有人说需要用release,我试了debug似乎不会有影响。

坑9:先make

坑10:重新!重新!重新构建!

(五)Ctrl+C,Ctrl+V

        如果编译没报错,会生成四个文件,qsqlmysql.dll,qsqlmysql.lib,qsqlmysqld.dll,qsqlmysqld.lib,也就是MySQL的驱动,复制粘贴到D:\QT\5.12.11\msvc2017_64\plugins\sqldrivers即可。但是!前方高能!第二大坑来了!

坑11:文件会生成在与QT平级的plugins文件夹,并不会生成在DEPENDPATH写的路径,写成绝对路径也没用!!!

(六)再次打开之前写的测试工程,有人说需要重启下QT,亲测并不需要,直接跑就好。

QT连接MySQL_第1张图片

方式二:ODBC

这个坑暂时还没见底,下载过64位,能添加数据源,连不上,当时报错是is not allowed to connect to this mysql server,参考了mysql数据库连接报错:is not allowed to connect to this mysql server_鱼大虾的博客-CSDN博客也没能改好。看网上介绍,在C盘找到了32位exe,根本连数据源都添不了,感觉变数更多,没去进一步研究,后续有经验了再来补全

你可能感兴趣的:(MySQL疑难杂症,QT疑难杂症,qt,mysql)