由於要在Qt上做數據庫的相關開發,需要連接MySQL,但是遇到了【driver not load】的錯誤,查閱相關資料後,解決了錯誤。以下是我總結的步驟,有需要的朋友們可以參考(避免走彎路):
起初,我是寫好代碼後,會報錯:driver not load,是因爲Qt本身缺少一個文件。
1.首先明確自己裝的MySQL的版本與Qt版本:
step1.以管理員身份運行:
輸入【mysql -V】查看到我的MySQL是64位的:
step2. 確定Qt是32位的:
打開任務管理器,Qt後邊括號裏寫32就代表是32位的。
2. 32位Qt連接64位MySQL
我的MySQL是zip版的,打開安裝目錄,找到libmysql.dll,然後複製,拷貝到qt安裝目錄下的bin目錄裏:
!!!但是,會報錯:driver not load,是因爲32位的Qt用了64位的libmysql.dll,當然會出錯。這時,需要32位的libmysql.dll,因爲網上這個真的很難找,需要的可以拿走:https://pan.baidu.com/s/1NJTI5zu5nwnpWN6yUfwl3A
提取碼:pbpp
step1.下好這個.dll文件後,拷貝粘貼到qt安裝目錄下的bin裏:
這時,編譯運行後,還是會報錯:
這是因爲:我使用的MySQL是8.0版本的,而我提供的.dll是5.x版本的,8.0版本所使用的驗證方式和5.X的不一樣,查看驗證方式:
我們需要把8.x版本的【caching_sha2_password】改爲5.x的驗證方式【mysql_native_password】,輸入命令:alter user ‘root’@’%’ identified with mysql_native_password by ‘新密碼’;如下圖:
還需要在MySQL的安裝目錄下修改my.ini文件:
在文件的[mysqld]下里加上:default_authentication_plugin=mysql_native_password
重新登錄,即可。
最後,附上測試代碼:
(需要在.pro文件裏有這句話:QT += core gui sql)
#include "widget.h"
#include "ui_widget.h"
#include <QtSql/QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include <QSqlError>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//打印Qt支持的數據庫驅動
qDebug()<<QSqlDatabase::drivers();
//添加MySQL數據庫
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//連接數據庫
db.setHostName("127.0.0.1"); //數據庫服務器IP,127.0.0.1表示本機
db.setUserName("root"); //數據庫用戶名
db.setPassword("你的密碼"); //“你的密碼”是自己登錄mysql的密碼
db.setDatabaseName("mysql"); //數據庫名字
//打開數據庫
if( !db.open())
{
QMessageBox::warning(this, "打開失敗",db.lastError().text());
return;
}
else
{
qDebug()<<"連接成功!!!";
return;
}
}
Widget::~Widget()
{
delete ui;
}