解決Qt數據庫驅動未加載的問題(QSqlDatabase:QPSQL driver not loaded QSqlDatabase)

我們知道Qt可以支持的數據庫有很多,如下所示:
Driver DB
QDB2 IBM DB2
QIBASE Borland InterBase Driver
QMYSQL MySQL Driver
QOCI Oracle Call Interface Driver
QODBC ODBC Driver (includes Microsoft SQL Server)
QPSQL PostgreSQL Driver
QSQLITE SQLite version 3 or above
QSQLITE2 SQLite version 2
QTDS Sybase Adaptive Server
但是在windows平臺下,直接可以使用的數據庫驅動只有QSQLITEQSQLITE2,像QMYSQL、QPSQL等數據庫如果直接使用就會出現數據驅動未加載的情況。

最近因爲數據庫驅動的問題搞得自己一個頭兩個大,查了很多的參考資料,也都嘗試了遍(那種死馬當活馬醫的心態),反反覆覆搞了好久,最後終於成功了(激動的我要哭了)
  1. 軟件及系統環境:win10,Qt5.13.1(mingw32),PostgreSql10.6(32位)
  2. 報錯如下:
QSqlDatabase: QPSQL driver not loaded 
QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QMYSQL QMYSQL3 QODBC 

第一句話指的是QPSQL數據庫驅動未加載
第二句話指的是Qt中可用的數據庫

從這兩句話中我們知道Qt中QPSQL驅動是可以使用的,問題是我們沒有加載。
沒有加載的原因很多,最常見的是未找到該驅動(和Qt的動態庫、靜態庫的鏈接有關)所以我們可以按照下面的方法進行排除查找原因。

  • 首先查看自己安裝的Qt的版本和PostgreSql的版本,若Qt是32位的,那麼PostgreSql也要選擇安裝32位的。如果安裝的位數不一樣驅動肯定找不到的。

  • 然後查看自己是否添加Qt和PostgreSql的環境變量,若沒有,添加如下環境變量
    在這裏插入圖片描述
  • 複製以下dll和lib到可執行文件目錄
    libintl.lib
    libpq.dll
    libpq.lib
    qsqlpsqld.dll
    qsqlpsql.dll
    ssleay32.dll
    libeay32.dll
  • 複製libpq.dll到C:Windwos/目錄下。
  • 在你的工程運行目錄下執行“windeployqt AppName.exe”
    QPSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QODBC QODBC3 QPSQL QP

我就是做了上述這些步驟後然後PSQL驅動就可以加載了,自然而然就連接上了PostgreSQL數據庫。這是把我激動壞了!!!


其他的嘗試
* 其實我查詢資料很多人都說可以重新編譯PostgreSQL數據庫的驅動,會生成我們需要的dll包,將這些拷貝到Qt項目可執行文件目錄下。 這裏我也嘗試過這個方法,使用mingw32編譯器重新編譯psql的驅動,需要注意的一點是qt需要使用源碼安裝,不然你無法找到src這個目錄。 編譯的命令如下:
qmake "INCLUDEPATH+=D:\PostgreSQL\10\include" "LIBS+=D:\PostgreSQL\10\lib\libpql.lib" -o Makefile 
pqsql.pro
mingw32-make

上面的路徑是你安裝PostgreSQL數據庫的路徑,這裏建議大家安裝PostgreSQL數據庫的時候不要安裝在有空格的目錄下,比如program files(這就是包含空格的)。


* 另外,我還嘗試使用使用mingw32編譯libpqxx包,這是C++的一個連接PostgreSql的包,悲傷的是我沒有成功,總是有一個C++11的錯誤,我當時也懶得搞了就去尋找要其他的辦法了。 然而編譯libpqxx包的方法是切實可行的,因爲我在我原來的腦上連接postgresql數據庫就是使用的這個方法,可是幾個月我就忘記我當時怎麼做的了(痛恨自己當時爲什麼沒有記錄下方法)。
libpqxx是C++的一個接口,自然的有一個C語言的接口 libpq。大家都可以嘗試,

上面我使用的是windows系統和qt中的mingw編譯器。如果使用mac系統就不存在驅動編譯的問題了。如果使用的msv(Visual Studio)編譯器,方法和這個應該是類似的!

上述如果大家有任何想法和意見建議,歡迎大家指出,我們共同進步!!

寫在最後

如果有小夥伴編譯成功了,要告訴我鴨,我很想很想嘗試.

我的QQ:2637394747

發佈了43 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章