1. 程式人生 > >Mac+QT中使用mysql的一些問題

Mac+QT中使用mysql的一些問題

今天打算在qt中用mysql,在網上搜了一下,大致就是需要在檔案中引用這個:
#include <QtSql>
並且要在專案的.pro中新增如下程式碼。
QT += sql
可是我照著做了,並且寫下了如下連線mysql資料庫的程式碼:

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");    //資料庫主機名
    db.setDatabaseName("xxxxxxx");    //資料庫名
    db.setUserName("root");        //資料庫使用者名稱
db.setPassword("root"); //資料庫密碼 db.open(); //開啟資料庫連線

可是會報錯:

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

在網上搜了一大堆相關的資料,比如將Qt下的sqldrivers資料夾新增到專案執行的檔案中,對於我,即這個路徑的檔案新增進去:/Users/XFade/Qt5.4.2/5.4/clang_64/plugins/sqldrivers,可是並沒有解決問題;
後來又看到了說要自己去重新編譯mysql驅動,即.dylib檔案,放到sqldrivers檔案裡面。我看了看不是很懂,所以沒有那樣做;不知道是不是真的能夠解決。
後來我看到了一解決方案,

點此檢視,在這個裡面,作者寫道:

Qt 訪問 MySQL 需要 2 個動態連結庫檔案,一個是 Qt 自己的 MySQL 驅動外掛,另一個是 MySQL 提供的動態連結庫,缺一不可。在程式裡指定要訪問的資料庫為 MySQL,Qt 會自動的載入 MySQL 驅動外掛,其實現依賴於MySQL 的動態連結庫訪問 MySQL。

這才有點領悟,於是我按照作者的步驟去做了,發現果然是那樣

找不到 /opt/local/lib/mysql55/mysql/libmysqlclient.18.dylib

可是這時我突然發現,它裡面說的那個libmysqlclient.18.dylib檔案,我沒有,倒是在/usr/local/mysql-5.7.12-osx10.11-x86_64/include/目錄(這是我本機的mysql安裝目錄)下有一個libmysqlclient.20.dylib;
我想起了以前電腦上裝過xampp,後來卸了,貌似裡面有libmysqlclient.18.dylib,於是我又重灌了一遍xampp(強迫症的我真的不想在電腦上裝兩個mysql,想想都有點不舒服,不過為了解決問題,沒辦法),然後把裡面的那個拷貝過來放在上面opt…的那個目錄下。
這時再執行,發現又報了一個非常嘔心的錯:

Connect to MySql error:  "Can't connect to local MySQL server through socket '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock' (2) QMYSQL: Unable to connect"

這時我又凌亂了,這個問題以前遇見過,一直不知道如何解決,後來搜了一下,原來是資料庫的連線有兩種方式,一種是sock,還有一種是TCP/IP,於是我把db.setHostName(“localhost”)改成了db.setHostName(“127.0.0.1”),再次執行,居然成功了!
雖然解決了這個問題,但是關於xampp我一直也很困惑,不知道從什麼時候起,那個mysql就再也啟動不了了
這裡寫圖片描述
而且在terminal中執行
這裡寫圖片描述
也會報那個sock錯誤,真是無語極了,因為沒裝xampp時,可以通過/usr/local/mysql-5.7.12-osx10.11-x86_64/這個mysql進得去,可是不裝xampp,QT的問題又解決不了。。。好吧,我自己心中的小船反正是翻了。。。