【全教程】qt連接mysql——從qt編譯mysql驅動到qt連接mysql數據庫(一、編譯連接前準備)

寫在最前面的話:

自己想做一個英語單詞記錄軟件,可以在手機上和電腦上進行記錄和查看,所以自己決定利用騰訊雲數據庫雲加校園活動很棒,不是打廣告哈),然後自己準備利用qt編寫上位機軟件。首先自己是在騰訊雲上購買了雲數據庫,然後利用騰訊雲的數據庫管理的軟件測試新建了數據庫。然後準備用遠程控制雲數據庫,首先測試了Nvicat Premium連接騰訊雲數據庫,發現可以用電腦上的軟件控制數據庫,然後準備用代碼控制,首先用的是的python連接騰訊雲數據庫,發現可以控制,其實可以用python GUI來寫上位機,但是沒有找到python寫安卓軟件的庫,所以再採用qt寫上位機

然後自己用qt後第一步也是準備找到mysql的庫,發現qt(5.13.2與5.14.1版本)竟然不帶mysql的驅動,最難的事就來了,如何裝上mysql的驅動?百度了各種文檔後發現需要mysql安裝包的各種文件,然後再利用qt帶的源碼自己編譯驅動,說幹就幹,去年12月的時候自己在學校(目前還是大學生)嘗試了一番,最後失敗了。放了寒假回到家沒有什麼事又想接着嘗試一番,最終經過一個晚上和一個下午的嘗試最後成功用qt連接上了雲數據庫。主要是先用Nvicat連接本地的mysql數據庫,成功連接後嘗試用qt連接,然後成功之後再連接雲數據庫。

一、說明

電腦系統:win10

qt版本:5.13.2和5.14.1(測試均成功)

mysql版本:MySQL-5.5

本篇教程分爲三個部分:

  1. 【全教程】qt連接mysql——從qt編譯mysql驅動到qt連接mysql數據庫(一、編譯連接前準備)
  2. 【全教程】qt連接mysql——從qt編譯mysql驅動到qt連接mysql數據庫(二、編譯連接)
  3. 【全教程】qt連接mysql——從qt編譯mysql驅動到qt連接mysql數據庫(三、問題整理)

本文參考鏈接(感謝各位大佬分享):

  1. 32位mysql安裝包_數據分析入門:如何下載安裝MySQL數據庫?
  2. Windows 環境下使用 Qt 連接 MySQL
  3. Qt連接MySql驅動加載失敗問題解決方法
  4. Qt-解決Qt與MySQL連接過程中出現“QSqlDatabase: QMYSQL driver not loaded”問題
  5. 「絕對獨家」Qt5.14.1 如何編譯和使用mysql和mariadb數據庫驅動
  6. qt5.12.3及以上高版本(qt5.13.0,qt5.13.1)如何連接操作mysql/mariadb數據庫
  7. Qt報錯“QSqlDatabase: QMYSQL driver not loaded“的解決方案

我寫過的兩篇文章(建議連接前先看看):

  1. Nvicat Premium連接騰訊雲數據庫
  2. python連接騰訊雲數據庫

二、軟件安裝

本文用的mysql5.5以及qt5.13.2、5.14.1兩個版本qt均測試成功,需要注意的是qt和mysql兩個版本需要對應,如果mysql是32位的則需要qt也是32位,mysql64位需要qt也是64位。我百度發現我的qt是32位所以我下載的是32位的mysql,後續操作我發現其實只需要qt的MinGW和mysql對應即可,qt中的MinGW有64位和32位的,所以只要查看你的mysql是多少位的即可。我用的是32位的。

1.安裝qt

可以自行百度,安裝時建議安裝全部組件,並且安裝在C盤以外的其他盤

2.安裝mysql

安裝32位的可以藉助下述文章,64位的需要自行百度,安裝也不需要安裝在c盤。最後配置完要知道自己root用戶的密碼,最好再新建一個數據庫然後建立一個測試表進行測試。參考文章:32位mysql安裝包_數據分析入門:如何下載安裝MySQL數據庫?

3.安裝Nvicat(推薦)

可以安裝Nvicat方便安裝mysql後測試安裝是否成功。

三、連接代碼

先上代碼,大家可以測試一下是不是可以成功連接,若是成功,則不需要後續編譯驅動的過程。

XXXX.pro文件

QT       += core gui sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
    main.cpp \
    mainwindow.cpp
HEADERS += \
    mainwindow.h
FORMS += \
    mainwindow.ui

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

mainwindow.h文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

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

main.cpp文件(注意這個需要改成自己數據庫的各種設置)

#include <QCoreApplication>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QtDebug>
void connect_mysql()
{
       QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
       db.setHostName("127.0.0.1");      //連接數據庫主機名,這裏需要注意(若填的爲”127.0.0.1“,出現不能連接,則改爲localhost)
       db.setPort(3306);                 //連接數據庫端口號,與設置一致
        db.setDatabaseName("money");      //連接數據庫名,與設置一致
        db.setUserName("root");          //數據庫用戶名,與設置一致
        db.setPassword("123456");    //數據庫密碼,與設置一致
        qDebug()<<"開始連接";
        db.open();
        if(!db.open())
        {
            qDebug()<<"不能連接"<<"connect to mysql error"<<db.lastError().text();
            return ;
        }
        else
        {
             qDebug()<<"連接成功"<<"connect to mysql OK";
        }
        QSqlQuery query(db);
        //這是自己的表的名字,下面操作是打印出test表name一列的所有數據
        query.exec("select * from test");
        while(query.next()){
            qDebug()<<query.value("name").toString();
        }
}
int main(int argc,char *argv[])
{
    QCoreApplication a(argc,argv);
    connect_mysql();
    return a.exec();
}

mainwindow.ui文件(無任何改動)

後續編譯部分見第二篇文章:【全教程】qt連接mysql——從qt編譯mysql驅動到qt連接mysql數據庫(二、編譯連接)

轉載參考分享此篇文章請註明出處!

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