Win平台qt配置mysql

用于windows平台下基于MSVC的Qt和MySql配置

Qt安装

Qt安装的时候要选择source,用于编译mysql驱动

CDB下载:winsdksetup.exe

需要选择对应MSVC编译器版本

编译qmysql驱动

在Qt的source文件夹在找到mysql.pro工程,具体路径为:${QT_DIR}\Src\qtbase\src\plugins\sqldrivers\mysql

用Qt Creator打开mysql.pro文件,修改对应文件

mysql.pro

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)
  

#这个主要是添加.h依赖文件使用
INCLUDEPATH+="C:\Program Files\MySQL\MySQL Server 8.0\include"

#添加依赖的.lib文件
LIBS+="C:\Program Files\MySQL\MySQL Server 8.0\lib\libmysql.lib"

#生成你所需要的dll存放目录
DESTDIR="C:\plugins\sqldrivers"

qsqldriverbase.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

修改完成后,选择合适的编译套件(MSVC或者MinGW)构建工程,在输出文件夹里得到了两个dll文件,qsqlmysql.dll和qsqlmysqld.dll

拷贝文件

  1. qsqlmysql.dll、qsqlmysqld.dll:复制到对应编译器文件夹下,例如:${QT_DIR}\msvc2017_64\plugins\sqldrivers
  2. libmysql.dll:从MySQL的安装文件夹下复制到Qt的文件夹下,C:\Program Files\MySQL\MySQL Server 8.0\libC:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin
  3. libcrypto-3-x64.dll、libssl-3-x64.dll:C:\Program Files\MySQL\MySQL Server 8.0\binC:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin

测试

#include "mainwindow.h"        // *****注意****

#include<QSqlDatabase>
#include <QApplication>
#include<QMessageBox>
#include <QSqlError>
#include <QDebug>
  
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;            //*****替换一下*****
    w.show();
  
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("127.0.0.1");  //连接本地主机
        db.setPort(3306);             //端口号,默认的
        db.setDatabaseName("mysql");     //数据库名
        db.setUserName("root");         //用户
        db.setPassword("mysql");  //密码
        bool ok = db.open();
        if (ok){
            QMessageBox::information(0, "infor", "link success");
        }
        else {
            QMessageBox::information(0, "infor", "link failed");
           // qDebug()<<"error open database because"<<db.lastError().text();
        }
        QSqlError error;
        error = db.lastError();
        if(error.isValid())
        {
            switch(error.type())
            {
            case QSqlError::NoError:
                qDebug() << "no error";
                break;
            case QSqlError::ConnectionError:
                qDebug() << error.text();
                break;
            case QSqlError::StatementError:
                qDebug() << error.text();
                break;
            case QSqlError::TransactionError:
                qDebug() << error.text();
                break;
            default:
                qDebug() << error.text();
                break;
            }
        }
        return a.exec();
}

测试成功:

image.png


「访客留言」:

本站总访问量次 本文总阅读量