Qt 5.12.8 32bit 与服务器配置MySQL [Kit:Mingw73_32]

本文章是在Qt Creator 上配置MySQL开发环境,以及在服务器上安装配置MySQL服务的整个流程,并包含众多配置过程中可能遇到的问题。按照本文内容,注意细节,配置就可以非常顺畅。

需要配置服务器端或者本地有架设MySQL服务进行测试需求的按全流程进行,只需要配置Qt开发环境从编译qsqlmysqld.dll、qsqlmysql.dll开始阅读即可。


 作者完成配置时的环境:

Qt Creator:4.11.2 (Based on Qt 5.14.2 [MSVC 2017, 32bit] )

编译文件时使用的MySQL:mysql-5.7.41-win32

70f8f7dcf05841a3835c249a00536448.png

服务器端MySQL服务:mysql-installer-web-community-8.0.32.0

程序编译时使用的Kit:Desktop Qt 5.12.8 MinGW 32-bit (debug)


配置步骤:

  1. 配置服务器MySQL80服务
  2. 编译qsqlmysqld.dll、qsqlmysql.dll文件,放置libmysql.dll、libmysqld.dll、libmysql.lib
  3. Qt项目配置Pro文件

目录

配置服务器MySQL80服务

编译qsqlmysqld.dll、qsqlmysql.dll

Qt项目配置Pro文件

可能遇到的错误


配置服务器MySQL80服务

1.请参考这篇文章:MySQL安装教程(详细)服务器端以管理员权限登录后,打开mysql-installer-web-community-8.0.32.0安装,与参考文章的出入在于选择自定义安装(Custom),然后选择自定义路径(参考:安装MYSQL自定义安装路径),避免路径中出现空格,自定义安装时选择MySQL Server 5.7.41,此处可能显示x86,没什么问题继续安装即可。当然如果有需求请自行修改。我使用Navicat Premium 16来连接MySQL和操作数据库。注意安装过程中牢记设置的密码,安装界面到如下图所示处可以添加一个用户用于后期客户端访问:

f1e496283f294f6aacb131c427a1b58d.png

此处我创建了user_account账户,点击Add User添加并把所有权限授予该账户。

此处也可以先新建,后期在Navicat Premium 16中设置,具体如下:

897c9b7062d14291942c4fdd530c92fe.png

此处点击用户,选中刚才创建的用户user_account,点击“权限”,为新建的数据库添加权限。这里方便试调权限全开了,但是后期实际使用应该只具备你需要的权限以保证安全。

2.完成了服务器MySQL服务安装后,测试本地连接是否成功。本地连接正常后,设置公网端口规则。若使用标准端口,服务器的防火墙应允许3306访问,非标准端口自行设置防火墙规则。(阿里、腾讯云等于网页端防火墙规则内添加相应端口)

8d4f8af4e8824d0fbbbd40601ff07a9c.png

 3.修改配置文件my.ini,配置以跳过SSL验证,此处设置会导致SSL和TLS验证不启用,因为在实际测试中,存在Qt项目没配置SSL被拒绝连接的情况,也存在不修改ini但是可以连接的情况,为了避免遇到问题,此处预先关闭。若有SSL需求的自行研究这块怎么做到Qt中去。

(1)找到my.ini文件,一般在下方的路径中:

4453baba76a145c8998753034fd13bed.png

 右键编辑,用记事本打开,底部添加下述内容,然后另存为保存同名同目录,修改保存编码为ANSI,提示可能会缺失内容点确定,然后覆盖掉原先的文件(否则无法重启MySQL80并报错:本地计算机上的MySQL80 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止)

[mysqld]
skip_ssl

保存后重启服务,可以进入MySQL的bin目录手动启动,也可以在服务菜单中重启服务:

830e4ea270974a67ac29c91547d89930.png

 至此完成了服务端MySQL服务配置。


编译qsqlmysqld.dll、qsqlmysql.dll

1.由于我使用的Qt Creator本身是32位,故选择老版本的32为MySQL来作为dll编译库,这里注意并不是Kit位数对应,而是Qt Creator位数对应。编译前需要确保Qt有Src,如果没有请先下载安装Src。可在此目录查看到:

711453b572974e399ad5b37755b3418f.png

 2.下载并安装mysql-5.7.41-win32,安装到一个无空格,无中文的目录下,例如:

b978f8845496466eb094eeb5af7f96c9.png

这里正常安装即可,服务正常与否不影响,我们只需要用它的文件,需要在本地调试程序的按照上方服务器配置的方法一样配置即可。 

3.向系统环境变量PATH添加解释器的路径和MySQL路径,参考:

d49cb4ff87f74f8080be2a12f1984671.png

4.添加后打开下面这个目录中的mysql.pro,在Qt Creator中查看项目(D:\Qt\Qt5.12.8\5.12.8\Src\qtbase\src\plugins\sqldrivers\mysql):

1af9c87d7a5449f2b31387e85dfbafa0.png

 向pro文件添加下述内容:(根据你的路径修改)

DESTDIR = ../mysql/lib
INCLUDEPATH += "D:/MySQL/mysql-5.7.41-win32/include"
LIBS += "D:/MySQL/mysql-5.7.41-win32/lib/libmysql.lib"
DEPENDPATH += $$quote(D:/MySQL/mysql-5.7.41-win32/include)

注释下述内容:

#QMAKE_USE += mysql

最终如下:

140700ea1b3e404eba67e955b804593b.png

打开qsqldriverbase.pri

f582a949d217486ba3eda1b089e033de.png

 内容如下:

QT  = core core-private sql-private
include(./configure.pri)
PLUGIN_TYPE = sqldrivers
load(qt_plugin)
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

之后点击运行,如果成功,有个弹窗直接关闭即可,下方目录生成四个文件(根据我们环境和Kit编译出来的动态链接库),如果遇到一堆报错,无法编译出的话,查看文章最下方可能遇到的错误手动编译即可:

参考路径:D:\Qt\Qt5.12.8\5.12.8\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers

def1a49950ba4721bce429e8c7b5c188.png

复制qsqlmysqld.dll、qsqlmysql.dll到Kit的plugins-sqldrivers路径下:

参考路径:D:\Qt\Qt5.12.8\5.12.8\mingw73_32\plugins\sqldrivers

 复制下面路径中(D:\MySQL\mysql-5.7.41-win32\lib)的

libmysql.dll和libmysql.lib 文件到D:\Qt\Qt5.12.8\5.12.8\mingw73_32\bin目录下

复制到:

 至此完成了Qt环境的MySQL配置工作。


Qt项目配置Pro文件

1.新建一个项目,向pro文件添加内容:

QT       += sql
CONFIG += mysql

2.需要使用MySQL的头文件添加声明:

#include <QtSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>

3.运行测试代码测试是否能够成功连接,此处我预先在数据库添加了表account并有username和password做查询测试:

void MySQL_connect_test()
{
    // 创建数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("你的MySQL IP地址,本地是localhost");
    db.setDatabaseName("数据库名");
    db.setUserName("登录名");
    db.setPassword("登录密码");
    if (!db.open()) {
        qDebug() << "Database error occurred";
        return;
    }

    // 执行查询(这里是一个包含用户名和密码的表account)
    QSqlQuery query("SELECT * FROM account");
    while (query.next()) {
        QString username = query.value(0).toString();
        QString password = query.value(1).toString();
        qDebug() << "username: " << username << ", password: " << password ;
    }

    // 关闭数据库连接
    db.close();
}

至此完成所有配置,希望对你有所帮助。


可能遇到的错误:

1.mysql编译不通过:检查MySQL和Qt位数是否一致,Kit可能也需要对应(未测试Kit的影响)

2.提示main.moc报错:手动进入mysql.pro的路径,管理员启动cmd输入下方内容手动编译:

moc main.cpp -o main.moc

同样,在目录下的cmd输入下方内容手动编译:

qmake
mingw32-make.exe

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值