天天看點

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

本文所使用的是MSVC 2017 下進行編譯生成的mysql的dll驅動

在第三次更新中使用的是MinGW 64 編譯的,操作和MSVC類似,隻需替換一個檔案即可。MSVC 2017生成的plugin驅動可直接下載下傳。

1.下載下傳mysql 5.7.30 winx64

Mysql 5.7.30 winx64

本文安裝目錄為 D:\mysql-5.7.30-winx64

2.下載下傳Qt 5.14.2

Qt 5.14.2

本文安裝目錄為 D:\Qt5.14.2

安裝的時候記得選擇source 以及 msvc 2017 x64的版本(本文基于此版本進行編譯的,其他版本請自行選擇)

3.添加系統環境變量

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫
qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫
qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

4.編譯mysql項目工程

工程目錄為:D:\Qt5.14.2\5.14.2\Src\qtbase\src\plugins\sqldrivers\mysql

使用qt5.14.2 打開此目錄中 .pro項目檔案,在打開工程後修改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)

INCLUDEPATH += "D:/mysql-5.7.30-winx64/mysql-5.7.30-winx64/include"

DEPENDPATH += "D:/mysql-5.7.30-winx64/mysql-5.7.30-winx64/include"

LIBS += "D:/mysql-5.7.30-winx64/mysql-5.7.30-winx64/lib/libmysql.lib"

5. 在編譯之後打開D:\plugins\sqldrivers 檔案夾發現所生成的驅動檔案,并複制下方選中的檔案并拷貝至

D:\Qt5.14.2\5.14.2\msvc2017_64\plugins\sqldrivers

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

拷貝後的檔案目錄如下圖所示

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

5.複制 D:\mysql-5.7.30-winx64\mysql-5.7.30-winx64\lib 此目錄下的兩個檔案如下圖所示

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

拷貝至如下目錄 D:\Qt5.14.2\5.14.2\msvc2017_64\bin

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

6. 在mysql中創立測試用的資料庫 并建任意表,如下圖所示

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

7. 在QT中建立一個widget工程,測試代碼如下,

7.1 首先在pro中添加

QT += sql

7.2 并引用相應的頭檔案

#include

7.3 在main中或widget中添加如下代碼進行測試

qDebug()<

QStringList drivers = QSqlDatabase::drivers();

foreach(QString driver, drivers)

qDebug()<

QSqlDatabase data_base = QSqlDatabase::addDatabase("QMYSQL");

data_base.setHostName("127.0.0.1"); //設定主機位址

data_base.setPort(3306); //設定端口 預設3306

data_base.setDatabaseName("sql5user"); //設定資料庫名稱

data_base.setUserName("root"); //對應資料庫的使用者名

data_base.setPassword("123456");//對應資料庫的密碼

if(!data_base.open())

qDebug()<

else

qDebug()<

7.4 程式輸出效果如下圖所示

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

第一次更新

在使用qt連接配接阿裡雲伺服器mysql5.28的時候,應該注意的是

應該存在指定的資料庫表名

檢查資料庫中所授權的使用者名,通常預設情況下root 的 host 為“localhost”,故此,需要授權一個使用者進行通路,使你的host 變為"%"即可

預設情況下,新授權的通路使用者是沒權限的,是以應該賦予權限給新添加的使用者

先查詢所授權的ip,authentication_string指的是 password(5.7的原因)

SELECT host,user,authentication_string,Grant_priv,Super_priv FROM mysql.user;

再使用如下語句進行權限的更改,代碼中xxxx指的是使用者的username,

(在出現ERROR:1142 即權限被拒絕的時候需執行如下語句,同時重新整理mysql, 重新開機mysql即可解決)

UPDATE mysql.user SET

`Select_priv` = 'Y',

`Insert_priv` = 'Y',

`Update_priv` = 'Y',

`Delete_priv` = 'Y',

`Create_priv` = 'Y',

`Drop_priv` = 'Y',

`Reload_priv` = 'Y',

`Shutdown_priv` = 'Y',

`Process_priv` = 'Y',

`File_priv` = 'Y',

`Grant_priv` = 'Y',

`References_priv` = 'Y',

`Index_priv` = 'Y',

`Alter_priv` = 'Y',

`Show_db_priv` = 'Y',

`Super_priv` = 'Y',

`Create_tmp_table_priv` = 'Y',

`Lock_tables_priv` = 'Y',

`Execute_priv` = 'Y',

`Repl_slave_priv` = 'Y',

`Repl_client_priv` = 'Y',

`Create_view_priv` = 'Y',

`Show_view_priv` = 'Y',

`Create_routine_priv` = 'Y',

`Alter_routine_priv` = 'Y',

`Create_user_priv` = 'Y',

`Event_priv` = 'Y',

`Trigger_priv` = 'Y',

`Create_tablespace_priv` = 'Y'

WHERE User='xxx';

在qt中運作資料庫語句的格式為

#include

#include

QSqlQuery SqlQuery;

SqlQuery.exec(" 在這裡插入你的sql語句"); //若能保證正确執行,隻使用這句即可,否則使用下方的語句進行判斷即可

if(!SqlQuery.exec("在這裡插入你的sql語句"))//此語句==!QSqlQuery.exec("在這裡插入你的sql語句")

{

qDebug()<

}

else

{

qDebug()<

}

若是運作的查詢語句,需知道資料庫表中的格式及列數

使用如下示例,若表中為兩列分别為 name 和 password

#include

QString login_check =QString("select * from userlogin;");

if(!SqlQuery.exec(login_check))//==!QSqlQuery.exec(create_sql)

{

qDebug()<

}

else

{

QString show_name ;

QString show_pwd ;

while(SqlQuery.next())

{

show_name = SqlQuery.value(0).toString();

show_pwd = SqlQuery.value(1).toString();

qDebug() <

}

if(show_name==NULL || show_pwd==NULL)

qDebug()<

}

表中資料以及在qt中收到資料如圖所示

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫
qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

第二次更新

在qt5.14.2 release後,檔案打包測試是無法直接連接配接mysql資料的

解決方法為在使用打包程式後,在exe同級目錄下添加libmysql.dll

libmysql源檔案位置所在如下圖所示

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

第三次更新

因近期使用MiniGW 64-bit 進行編譯,需要生成相應驅動,首先按MSVC中的方法進行拷貝,

環境均不用改,在編譯前先将原來生成的D:\ plugin的目錄剪切至其他地方

再次使用mysql.pro中的檔案進行編譯,選擇MiniGW 64-bit 編譯。

會生成如下檔案

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫

将qsqlmysql.dll重新拷貝至下圖目錄,注意是mingw的,進行替換即可連接配接資料庫。

Mingw 64 的大小是284kb ,MSVC 2017 64bit 的是61kb!

qt5 mysql 頭檔案_Qt 5.14.2 連接配接Mysql 資料庫