【最新】Qt5.13及以上版本如何訪問MySQL數據庫

Qt訪問數據庫的坑還是挺多的。在5.13及以上版本中,QMYSQL驅動被去除了,不能直接使用。在新版本中訪問MySQL還是挺麻煩的,故在此記錄一下。


安裝Qt時的坑

首先前往官網下載Qt:Qt下載地址

這裏我選擇最新的5.14.2目錄下的qt-opensource-windows-x86-5.14.2.exe.

下載後雙擊安裝,注意選擇組件界面:

在這裏插入圖片描述
在這裏插入圖片描述
此處有兩個注意事項:

  1. 必須選上Sources,裏面有MySQL依賴的dll
  2. 要根據MySQL的位數選擇對應的編譯器,如64位的MySQL必須使用64位的MingW才能正常訪問(網傳如此,筆者未測試過32位是否使用)

別的組件根據自己的需求添加即可,安裝部分就講到這裏。


配置驅動

此時我們就可以查看一下Qt中有哪些sql驅動了。

新建一個Qt Console Application項目用於測試,選擇MingW-64bit作爲Debugger.

在.pro文件中加入以下語句,引入sql功能:

QT += sql

main.cpp寫法如下:

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>

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

  QStringList drivers = QSqlDatabase::drivers();
  foreach(QString driver, drivers)
  qDebug() << driver;

  return a.exec();
}

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

  QStringList drivers = QSqlDatabase::drivers();
  foreach(QString driver, drivers)
  qDebug() << driver;

  return a.exec();
}

輸出結果:

"QSQLITE"
"QODBC"
"QODBC3"
"QPSQL"
"QPSQL7"

輸出結果中並沒有我們想要的QMYSQL驅動,我們需要另行配置。

添加驅動

打開\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql目錄下的mysql.pro文件啓動項目,對mysql.pro作出以下修改:

# QMAKE_USE += mysql # 暫時屏蔽mysql
...
INCLUDEPATH += "D:\software\system\mysql-8.0.19-winx64\include" # MySQL安裝路徑下的include目錄
LIBS += "D:\software\system\mysql-8.0.19-winx64\lib\libmysql.lib" # MySQL安裝路徑下的庫文件
DESTDIR  = ../mysql/lib/ # 輸出目錄

運行之後會報錯,不要緊,找到同級目錄下的lib目錄,所需dll已經生成:
在這裏插入圖片描述
將生成的dll文件放入對應編譯器的plugins\sqldrivers目錄中,這裏存放了所有sql驅動,此處我放到Qt5.14.2\5.14.2\mingw73_64\plugins\sqldrivers中:
在這裏插入圖片描述
再次運行測試程序,輸出結果:

"QSQLITE"
"QMYSQL"
"QMYSQL3"
"QODBC"
"QODBC3"
"QPSQL"
"QPSQL7"

我們所需的QMYSQL驅動已經存在。

添加依賴

有了驅動之後還不夠,我們還需要引入mysql中的dll文件,打開mysql安裝路徑:mysql-8.0.19-winx64\lib,複製其中的libmysql.dlllibmysql.lib到項目編譯後的目錄中,本例爲與項目目錄同級的build-sql_test-Desktop_Qt_5_14_2_MinGW_64_bit-Debug,這也意味着最後的打包程序中也需要手動添加這兩個依賴。

在這裏插入圖片描述


訪問操作

我們來試驗一個簡單的遍歷全表:

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>

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

  QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 數據庫類型
  db.setHostName("localhost"); // 主機名
  db.setPort(3306);
  db.setDatabaseName("hello_mysql"); // 數據庫名稱
  db.setUserName("root"); // 用戶名
  db.setPassword("123"); // 密碼

  if(!db.open()){
    qDebug()<<"Unable to establish a database connection";
  }else{
  QSqlQuery query(db);

  query.exec("select * from user");
  while(query.next())
    qDebug()<<query.value(0).toString() // 訪問方式一,通過列數索引
    <<query.value("name").toString(); // 訪問方式二,通過列名

  db.close();
  }

  return a.exec();
}

輸出結果:

"1" "雪之下雪乃"
"2" "小木曾雪菜"
"4" "友利奈緒"
"5" "曉美焰"
"6" "冬馬和紗"
"7" "雪之下陽乃"

這就是新版Qt訪問MySQL的全過程。

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