需求
Qt 自帶的 SQLITE 驅動, 只支持本地的數據庫 . 而能支持在線數據庫的 QMYSQL 需要自己編譯.
本文的環境使用的是 MacOS Bigsur, Qt版本 5.14.2. ( Qt 不能為從 Brew 安裝的版本! )
解決方案
前往 官網 下載 SQLServer, 安裝到本地.
我們不需要他開機啟動, 安裝他只是為了獲得他提供的 Lib, 所以進設置關掉開機啟動.
乘著下載的時間, 我們設置一下 PATH
export QTDIR=/opt/Qt/5.14.2/clang_64 export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export PATH=$QTDIR/bin:$PATH export PATH="/usr/local/mysql/bin:$PATH"
可以試一試運行 mysql
, 如果能跑起來, qt 就應該可以監測到.
下載、安裝完成後, 定位到 Qt 安裝的目錄:
cd /opt/Qt/5.14.2/src/qtbase/src/plugins/sqldrivers
(我安裝在/Opt
目錄裡面, 你的可能在其他地方.)
然後運行如下指令:
$ qmake -- MYSQL_PREFIX=/usr/local/mysql Info: creating stash file /opt/Qt/5.14.2/Src/qtbase/src/plugins/sqldrivers/.qmake.stash Running configuration tests... Checking for DB2 (IBM)... no Checking for InterBase... no Checking for MySQL... yes Checking for OCI (Oracle)... no Checking for ODBC... no Checking for PostgreSQL... no Checking for SQLite (version 2)... no Checking for TDS (Sybase)... no Done running configuration tests. Configure summary: Qt Sql Drivers: DB2 (IBM) .............................. no InterBase .............................. no MySql .................................. yes OCI (Oracle) ........................... no ODBC ................................... no PostgreSQL ............................. no SQLite2 ................................ no SQLite ................................. yes Using system provided SQLite ......... no TDS (Sybase) ........................... no Qt is now configured for building. Just run 'make'. Once everything is built, you must run 'make install'. Qt will be installed into '/opt/Qt/5.14.2/clang_64'. Prior to reconfiguration, make sure you remove any leftovers from the previous build.
如果你像我一樣看到 Mysql 對應的是yes, 那麼就可以進入下一步了.
make sub-mysql
如果沒有報錯的話, 可以接著運行:
make install
現在 再次編譯程序, 應該已經可以正常工作了.
如果需要打印當前 Qt 支持的驅動, 可以參考以下程序:
#include "mainwindow.h" #include <QApplication> #include <QtSql> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug() << "Available drivers:"; QStringList drivers = QSqlDatabase::drivers(); foreach(QString driver, drivers) qDebug() << "\t" << driver; return a.exec(); }
踩坑
- 如果你需要在其他系統上正常運作程序, 你可能需要將 lib 文件拷貝過去, lib 文件位於
/opt/Qt/5.14.2/src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers
- 如果你用 qt5 的話, 強烈建議使用最新版. 比較舊的如 5.9 編譯時會報錯.
- 如果你在沒有配置完成的情況下運行了一次
qmake
, 然後後面怎樣 make 都提示 no, 應該是沒有把第一次 make 出來的東西清理乾淨, 首先make distclean #刪除 make 製造出來的所有文件
然後參考 Qt 的 repo 把目錄裡多出來的東西清理一下 (注意你的版本要保持一致). - 如果不小心誤刪了文件其實也是沒有關係的, clone 一下 qt 的 repo 然後把對應版本的代碼考到你的 qt 安裝目錄重新安裝就可以了.