环境:Qt6.7.3,编译器使用msvc2019_64,MySQL8.0

问题描述

  1. Qt连接MySQL报错如下:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMIMER QODBC QPSQL QMARIADB QMYSQL
createConnection error: "Driver not loaded Driver not loaded"

MySQL动态库配置

  1. 将计算机上所安装的MySQL根目录下lib目录下的libmysql.lib和libmysql.dll复制到Qt根目录6.7.3\msvc2019_64\bin下,具体复制的路径依使用的编译器而定
  2. 将计算机上所安装的MySQL根目录下bin目录下的libcrypto-3-x64.dll和libssl-3-x64.dll复制到Qt根目录6.7.3\msvc2019_64\bin下,具体复制的路径依使用的编译器而定

MySQL驱动编译

前提:安装Qt时需要安装源码。安装过源码的在Qt根目录下才会有Src目录

  1. 修改安装的Qt根目录6.7.3\Src\qtbase\src\plugins\sqldrivers下的.cmake.conf配置文件,新增如下配置:修改的路径依安装的MySQL路径而定
SET(FEATURE_sql_mysql ON)
SET(MySQL_INCLUDE_DIR "E:/developTools/tools/mysql8.0/include")
SET(MySQL_LIBRARY "E:/developTools/tools/mysql8.0/lib/libmysql.lib")

  1. 使用Qt Creator打开Qt根目录6.7.3\Src\qtbase\src\plugins\sqldrivers下的CMakeLists.txt配置文件,然后选择msvc2019_64编译器,同时编译Debug和Release版本的
  2. 将build\Desktop_Qt_6_7_3_MSVC2019_64bit-Debug\plugins\sqldrivers目录下的相关文件复制到6.7.3\msvc2019_64\plugins\sqldrivers目录下:

测试程序

  1. mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <qDebug>


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QSqlDatabase db;
    QSqlQuery query;
};
#endif // MAINWINDOW_H

  1. mainwindow.cpp
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    db = QSqlDatabase::addDatabase("QMYSQL");

    db.setHostName("localhost");

    db.setPort(3306);

    db.setDatabaseName("student_grade_management_system");

    db.setUserName("root");

    db.setPassword("123456");

    if (!db.open()) {

        qDebug("QMYSQL connect failed.");

        qDebug() << db.lastError().text();

    } else {

        qDebug("Sql connected.");

    }

    query=QSqlQuery(db);
    
    QString sq="INSERT INTO `users` VALUES ('admin', '管理员', '123456', 1, NULL, 1, 'admin@example.com', '13800138000', 1, 0, '2025-02-01 20:13:07');";

    bool res=query.exec(sq);
    if(!res){
        qDebug()<<"添加失败";
    }else {
        qDebug()<<"添加成功";
    }
}

MainWindow::~MainWindow() {}

  1. main.cpp
#include "mainwindow.h"

#include <QApplication>
#include <QProcess>
#include <QStyleFactory>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    qDebug() << "Available drivers:";
    QStringList drivers = QSqlDatabase::drivers();  //获取现在可用的数据库驱动
    foreach(QString driver, drivers)
    qDebug() << driver;

    w.show();
    return a.exec();
}

  1. 程序运行结果如下:
Sql connected.
添加成功
Available drivers:
"QSQLITE"
"QMIMER"
"QMARIADB"
"QMYSQL"
"QODBC"
"QPSQL"