QT連接MySQL


Qt 連接MySQL 是件很簡單的事,但也有可能很不簡單。

QT給我們的提示只有 QMYSQL driver not loaded,讓我們毫無頭緒。訪問其他數據庫也可以用同樣的方法解決。

Qt 訪問 MySQL 需要 2 個動態鏈接庫文件,一個是 Qt 自己的 MySQL 驅動插件,另一個是 MySQL 提供的動態鏈接庫,缺一不可。在程序里指定要訪問的數據庫為 MySQL,Qt 會自動的加載 MySQL 驅動插件,其實現依賴於MySQL 的動態鏈接庫訪問 MySQL。

#include <iostream>
#include <QSqlDatabase>

#include <QDebug>
using namespace std;
int main()
{
    QSqlDatabase d = QSqlDatabase::addDatabase("QMYSQL");
    d.setHostName("127.0.0.1");
    d.setDatabaseName("dbName");
    d.setPort(3306);
    d.setUserName("root");
    d.setPassword("root");
    if(d.open())
        cout<<"Hi mysql!連接"<<endl;
    else
        cout<<"失敗"<<endl;
    qDebug()<<QSqlDatabase::drivers()<<endl;
    return 0;
}

運行上面的代碼,QT只給我們驅動沒有加載的提示。Qt 5 的 SDK 默認提供了編譯好的 MySQL 驅動插件,位於 plugins/sqldrivers(Mac OS 下為 libqsqlmysql.dylib,Windows 下為 qsqlmysql.dll),這個可以直接使用。但如果用的是 Qt 4,很不幸, 需要我們自己編譯 MySQL 的驅動插件,而且不同的系統,不同的編譯器中步驟有所區別,需要相當大的篇幅才能講清楚。接下來還需要MYSQL的動態鏈接庫:

 1 #include <QSqlDatabase>
 2 #include <QSqlQuery>
 3 #include <QSqlError>
 4 #include <QPluginLoader>
 5 #include <QDebug>
 6 
 7 void loadMySqlDriver();
 8 
 9 int main(int argc, char *argv[]) {
10 
11     loadMySqlDriver();
12     return 0;
13 }
14 
15 void loadMySqlDriver() {
16     QPluginLoader loader;
17     // MySQL 驅動插件的路徑
18     loader.setFileName("/Users/Stdu/Qt5.6.1/5.6/clang_64/plugins/sqldrivers/libqsqlmysql.dylib");
19     qDebug() << loader.load();
20     qDebug() << loader.errorString();
21 }

執行上面的代碼,終於能看到問題出在哪里,需要opt/..../libmysqlclient.18.dylib這個動態鏈接庫。

我的MYSQL是5.7,其中包含的動態鏈接庫是libmysqlclient.20.dylib,但我想了想這個庫就是連接MYSQL的關鍵所在,將其改名為libmysqlclient.18.dylib,放在opt/.../下。連接成功。

參考:http://qtdebug.com/DB-AccessMySQL.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM