当前位置:   article > 正文

QSqlDatabase::addDatabase奔溃及driver not loaded解决

qsqldatabase::adddatabase

1.奔溃

如下代码:

  1. #include "QtGuiApplication1.h"
  2. #include "qsqldatabase.h"
  3. #include "qsqlquery.h"
  4. #include "qdebug.h"
  5. QtGuiApplication1::QtGuiApplication1(QWidget *parent)
  6. : QMainWindow(parent)
  7. {
  8. ui.setupUi(this);
  9. QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
  10. db.setHostName("127.0.0.1");
  11. db.setDatabaseName("postgis_24_sample");
  12. db.setPort(5432);
  13. db.setUserName("postgres");
  14. db.setPassword("admin");
  15. bool ok = db.open();
  16. int b = ok;
  17. QSqlQuery query;
  18. query.exec("Select * from \"Pipes\"");
  19. while (query.next())
  20. {
  21. QString id = query.value(1).toString();
  22. qDebug() << id;
  23. }
  24. }

运行到第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

2.连接失败

第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");

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/699798
推荐阅读
相关标签
  

闽ICP备14008679号