赞
踩
如下代码:
- #include "QtGuiApplication1.h"
- #include "qsqldatabase.h"
- #include "qsqlquery.h"
- #include "qdebug.h"
-
- QtGuiApplication1::QtGuiApplication1(QWidget *parent)
- : QMainWindow(parent)
- {
- ui.setupUi(this);
-
- QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
- db.setHostName("127.0.0.1");
- db.setDatabaseName("postgis_24_sample");
- db.setPort(5432);
- db.setUserName("postgres");
- db.setPassword("admin");
- bool ok = db.open();
-
- int b = ok;
- QSqlQuery query;
- query.exec("Select * from \"Pipes\"");
- while (query.next())
- {
- QString id = query.value(1).toString();
- qDebug() << id;
- }
- }
运行到第11行时会奔溃,排查了好久,原因如下:
使用的QPSQL数据库驱动和当前编写代码的Qt版本不一致造成的,如:当前用的Qt为Qt 5.14.1,但是第11行加载的数据库驱动qsqlpsql.dll是其它Qt版本的,如:是Qt 5.15.1.当版本不兼容时,有时会崩溃。比如:有时是从其它Qt版本拷贝过来的数据库驱动。数据库驱动一般在Qt安装目录下的 plugins\sqldrivers 目录下。比如我本机是:
C:\Qt_5_12_3\Qt5.12.3\5.12.3\msvc2017\plugins\qldrivers
第17行即ok返回false,该原因一般是找不到数据库驱动导致,报错如下:
driver not loaded
用以下代码输出数据库驱动程序为空:
qDebug() << QSqlDatabase::drivers() << "\r\n";
解决方法有两种:
1):新增系统变量QT_PLUGIN_PATH,根据每个人QT系统安装路径进行配置,比如我的系统C:\Qt_5_12_3\Qt5.12.3\5.12.3\msvc2017\plugins。然后重启开发环境,如:重启VS、QtCreator。
2):通过如下代码将数据库驱动程序所在的插件目录加入到库搜索目录中:
QCoreApplication::addLibraryPath(R"(C:\Qt_5_12_3\Qt5.12.3\5.12.3\msvc2017\plugins)");
根据每个人QT系统安装路径进行配置,比如我的系统是:
C:\Qt_5_12_3\Qt5.12.3\5.12.3\msvc2017\plugins
说明:一般都将插件目录(如:C:\Qt_5_12_3\Qt5.12.3\5.12.3\msvc2017\plugins)放到可执行文件同一目录下。最好是在应用程序文件夹下创建 plugins 文件夹,然后到本机上对应Qt版本的安装目录,把sqldrivers目录拷贝到刚创建的plugins文件夹下,然后在main函数中加入如下代码:
QCoreApplication::addLibraryPath(QCoreApplication::applicationDirPath() +"/plugins");
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。