Qt5连接mysql8笔记(亲测可用)

好记性不如烂笔头,今天被Qt连接mysql折腾半天,终于解决了,赶紧做个记录,以便后续翻阅
本文是在已经正确安装mysql8的基础上进行,若未完成mysql8的安装,可按照上一篇笔记进行操作
本文在Qt5.12.12,Qt5.15.2使用对应版本的MSVC验证通过,下文以Qt5.12.12为例进行说明,Qt5.15.2几乎一样,MinGW也类似

开发环境:

  • Qt版本:Qt5.12.12、Qt5.15.2
  • 编译器:MSVC2017 64位、MSVC2019 64位
  • MySQL版本:8.0.29

一、编译mysql

Qt5.12.12或Qt5.15.2默认是没有mysql的驱动,如果直接新建连接mysql数据库的工程并运行,会提示以下错误

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

故首先应对mysql的源码进行编译,这里需要注意,编译器的版本和位数不能换,否则无法使用

  1. 进入D:\Qt\5.12.12\Src\qtbase\src\plugins\sqldrivers\mysql目录,打开mysql.pro工程

  2. 打开mysql.pro文件,对其进行编辑

    1. 首先将QMKE_USE += mysql 注释掉

    2. 添加安装好的mysql的库文件和头文件目录

      TARGET = qsqlmysql
      
      HEADERS += $$PWD/qsql_mysql_p.h
      SOURCES += $$PWD/qsql_mysql.cpp $$PWD/main.cpp
      
      # 步骤1:将QMAKE_USE += mysql注释掉
      
      # QMAKE_USE += mysql
      
      OTHER_FILES += mysql.json
      
      PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
      
      include(../qsqldriverbase.pri)
      
      # 步骤2:添加mysql的库文件和头文件目录
      
      LIBS += "C:/mysql-8.0.29-winx64/lib/libmysql.lib"
      INCLUDEPATH += "C:/mysql-8.0.29-winx64/include"
      DEPENDPATH += "C:/mysql-8.0.29-winx64/include"
      
  3. 打开qsqldriverbase.pri,对其进行编辑

    1. 将include( s h a d o w e d ( shadowed( shadowed(PWD)/qtsqldrivers-config.pri)注释掉,改为include(./configure.pri)
    QT  = core core-private sql-private
    
    # For QMAKE_USE in the parent projects.
    # 步骤3:注释掉include($$shadowed($$PWD)/qtsqldrivers-config.pri),改为include(./configure.pri)
    # 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
    
    
  4. 左下角,构建方式选择为Release

  5. 点击左上角工程名mysql,执行qmake

  6. 点击左下角编译按钮(小锤子)
    由于我的Qt安装在D盘,故生成的文件在 D:\plugins\sqldrivers里

二、拷贝库文件

  1. 将编译好的目录内qsqlmysql.dll、qsqlmysqld.dll拷贝到D:\Qt\5.12.12\msvc2017_64\plugins\sqldrivers目录内

  2. 将C:\mysql-8.0.29-winx64\lib下libmysql.dll,C:\mysql-8.0.29-winx64\bin下libcrypto-1_1-x64.dll和libssl-1_1-x64.dll拷贝到D:\Qt\5.12.12\msvc2017_64\bin目录下

    注:libcrypto-1_1-x64.dll和libssl-1_1-x64.dll是libmysql.dll执行需要使用的动态库,需要将其一起拷贝到编译器的bin目录下

三、创建测试数据库

进入mysql,创建名为test的数据库(create database test)

PS C:\mysql-8.0.29-winx64\bin> .\mysql -uroot -p
Enter password: ******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.29 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database test;
Query OK, 1 row affected (0.01 sec)

mysql> quit
Bye
PS C:\mysql-8.0.29-winx64\bin>

四、Demo工程

打开Qtcreator,新建工程,为了方便,我选择了console,工程名为mysqltest,打开mysqltest.pro,增加 QT += sql

QT -= gui

# 步骤1
QT += sql

CONFIG += c++17 console
CONFIG -= app_bundle

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

打开main.cpp,增加测试代码

#include <QCoreApplication>
// 步骤2:增加头文件
#include <QSqlDatabase>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

// 步骤3:连接mysql的test数据库测试代码
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");  //连接本地主机
        db.setPort(3306);
        db.setDatabaseName("test");
        db.setUserName("root");
        db.setPassword("123456");
        bool ok = db.open();
        if (ok){
            qDebug()<< "infor link success";
        }
        else {
            qDebug()<< "infor link failed";
            qDebug()<<"error open database because"; //<<db.lastError().text();
        }


    return a.exec();
}

点击运行,程序输出窗口可看到已经成功连接

00:10:56: Starting C:\Users\sos_l\Documents\build-mysqltest-Desktop_Qt_5_12_12_MSVC2017_64bit-Debug\debug\mysqltest.exe...
infor link success
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Qt5连接 MySQL 数据库,需要在项目的 .pro 文件中添加 MySQL 驱动程序库的链接。具体步骤如下: 1. 在 Qt 项目的 .pro 文件中添加如下代码: ``` QT += sql ``` 2. 下载 MySQL 驱动程序库,下载地址如下: https://dev.mysql.com/downloads/connector/c/ 3. 将下载好的 MySQL 驱动程序库中的 libmysql.dll 文件拷贝到 Qt 安装目录下的 bin 目录中,如: ``` C:\Qt\Qt5.9.1\5.9.1\mingw53_32\bin ``` 4. 在 Qt 项目的 .pro 文件中添加如下代码: ``` LIBS += -L"path/to/mysql/lib" -lmysql INCLUDEPATH += "path/to/mysql/include" ``` 其中,path/to/mysql/lib 为 MySQL 驱动程序库中 libmysql.dll 文件所在路径,path/to/mysql/include 为 MySQL 驱动程序库中头文件所在路径。 5. 在代码中使用以下代码连接 MySQL 数据库: ``` #include <QSqlDatabase> #include <QSqlQuery> QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.setHostName("localhost"); db.setDatabaseName("database_name"); db.setUserName("username"); db.setPassword("password"); if (!db.open()) { // 连接失败 } else { // 连接成功 } ``` 其中,"QMYSQL" 为 MySQL 驱动程序的名称,"localhost" 为 MySQL 数据库的主机名,"database_name" 为要连接数据库名称,"username" 和 "password" 分别为数据库的用户名和密码。 6. 使用 QSqlQuery 对象执行 SQL 语句,例如: ``` QSqlQuery query; query.exec("SELECT * FROM table_name"); while (query.next()) { QString name = query.value("name").toString(); int age = query.value("age").toInt(); // ... } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值