解决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

你可能感兴趣的:(Qt,PostgreSQL)