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

本文探讨了使用Qt连接PostgreSQL数据库过程中遇到的问题及解决方案,包括因Qt版本与数据库驱动不匹配导致的崩溃,以及连接失败的情况。提供了两种解决方法:设置系统变量QT_PLUGIN_PATH或在代码中指定插件路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.奔溃

如下代码:

#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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值