Qt 5.13 重新編譯源碼,連接 MySQL 5.7

安裝Qt新版本的時候,會發現裏面沒有QMYSQL,所以要使用QMYSQL的時候會報以下的錯誤

QSqlDatabase: QMYSQL driver not loaded

QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QPSQL7

 

這時候,就要自己編譯源碼了。這裏有一篇博客可以參考

https://www.cnblogs.com/szitcast/p/11105899.html

 

整個流程就是用Qt打開源代碼裏Mysql的驅動項目,修改pro文件,編譯(解決編譯過程中的報錯,主要是路徑的錯誤),然後就可以得到dll,放到相應的位置,再放入libmysql.dll就可以了

 

這裏把我的經驗寫下來

我的Mysql是zip解壓縮後,自己創建my.ini並配置環境變量,安裝路徑是D:\services\MySQL\mysql-5.7.23-winx64\

我的QT是5.13版本,默認安裝路徑C:\Qt\Qt5.13.0

 

1 安裝的時候模塊要加入source

2 用QT打開源碼的mysql項目,默認位置如下

    C:\Qt\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers\mysql\mysql.pro

   

3 修改mysql.pro,有三個修改的地方

include($$shadowed($$PWD)/configure.pri)

TARGET = qsqlmysql

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

#修改1 Library 'mysql' is not defined.
#QMAKE_USE += mysql

OTHER_FILES += mysql.json

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin

#修改2 添加以下三行
win32:LIBS += -LD:\services\MySQL\mysql-5.7.23-winx64\lib -llibmysql
INCLUDEPATH += D:\services\MySQL\mysql-5.7.23-winx64\include
DEPENDPATH += D:\services\MySQL\mysql-5.7.23-winx64\include

#修改3 錯誤提示 Cannot read C:/qtsqldrivers-config.pri: No such file or directory 改爲絕對路徑
#include(../qsqldriverbase.pri)
include(C:\Qt\Qt5.13.0\5.13.0\Src\qtbase\src\plugins\sqldrivers/qsqldriverbase.pri)


 

4  點擊左下角的工具圖標,Build項目,如果控制檯沒有報錯的話就成功了,如果報錯的話把構建的資料夾刪除,看錯誤信息修改後,再從新構建

會在QT的安裝目錄的磁盤下新建\plugins\sqldrivers的文件夾

C:\plugins\sqldrivers

裏面就有4個檔案

qsqlmysql.dll,qsqlmysqld.dll

libqsqlmysql.a

libqsqlmysqld.a

 

5 把剛剛生成的 qsqlmysql.dll,qsqlmysqld.dll 拷貝到C:\Qt\Qt5.13.0\5.13.0\mingw73_64\plugins\sqldrivers

 

6 拷貝Mysql的libmysql.dll到QT的bin目錄下,  例如我的是 D:\services\MySQL\mysql-5.7.23-winx64\lib的libmysql.dll拷貝到C:\Qt\Qt5.13.0\5.13.0\mingw73_64\bin

7 要使用mysql的項目pro文件要加入 QT += sql

 

 

=====20190911

這裏補充下安裝成功後測試的代碼

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>

#include <QSqlResult>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

    void connectDB();

private:
    Ui::MainWindow *ui;



};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>



MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}



void MainWindow::connectDB()
{
    QSqlDatabase database;
    database = QSqlDatabase::addDatabase("QMYSQL");
    database.setHostName("localhost");
    database.setDatabaseName("data");
    database.setUserName("root");
    database.setPassword("root");
    database.setPort(3306);
    bool ok = database.open();
    if(ok){
          qDebug()<<"成功連接數據庫";

    }else{
        qDebug()<<"警告 無法連接數據庫";

    }

}

main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include "mymysql.h"

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

   QSqlQuery query;

   query.exec("select * from student");
   while(query.next())
      {

          qDebug()
                  <<"查詢結果"
                  <<query.value(0).toString()
                 << query.value(1).toString();
      }


    return a.exec();
}

pro文件要加入sql

#-------------------------------------------------
#
# Project created by QtCreator 2019-08-23T13:20:25
#
#-------------------------------------------------

QT       += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = MySqlSetup
TEMPLATE = app
#修改2
#QMAKE_LFLAGS +=D:\services\MySQL\mysql-5.7.23-winx64\lib\libmysql.dll

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11

SOURCES += \
        main.cpp \
        mainwindow.cpp

HEADERS += \
        mainwindow.h

FORMS += \
        mainwindow.ui

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

 

在數據庫裏新建一張表取名student ,欄位name,age 隨便寫一條數據,執行結果

10:32:00: Starting D:\workspaceForQt\build-MySqlSetup-Desktop_Qt_5_13_0_MinGW_64_bit-Debug\debug\MySqlSetup.exe ..

成功連接數據庫

查詢結果 "yiqian" "39"

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章