安裝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"