QT学习笔记-QT安装postgresql驱动

news/2024/7/9 19:39:48 标签: qt, 学习, postgresql

QT学习笔记-QT安装postgresql驱动

  • 0、背景
  • 1、环境以及条件说明
  • 2、编译驱动
  • 3、让QT的程序能找到编译好的驱动
  • 4、复制依赖的数据库动态库
  • 5、访问数据库运行成功

0、背景

在使用QT开发应用的过程中,往往会把应用使用过程中产生的数据放入数据库进行统一存储,因此通过QT实现数据库的访问可以说是必须的一个知识点,起始QT访问数据库的语法及相关类和方法的使用并不复杂,但是对于使用QT的新人来说往往会开在数据库驱动加载的地方,比如遇到以下问题:

QSqlDatabase: QPSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMARIADB QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7

虽然QT的驱动列表中有QPSQL,但是确保不能加载。下面就来说一下正确使用QT方法数据的驱动问题。

QT最新的安装包安装完毕后,默认支持ODBC和SQLITE数据库,要想使用其他的数据库那么你在安装QT的时候要把源码选项勾上。

1、环境以及条件说明

操作系统:windows10专业版
数据库版本:Postgresql 14.6(64位)(在编译驱动的时候需要引用这里面的库和头文件,也可以不安装直接下载压缩包解压也行)
QT版本:5.15.2,且安装的时候勾选了源码
QT编译套件:MinGW64(关于32位位与64位问题要与数据库一致)

2、编译驱动

我的Postgresql安装目录为:D:\pgsql
我的QT安装目录为:D:\Qt
对应的数据库驱动源码目录为:D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers
如下图:
在这里插入图片描述
1、选择对应数据库类型的源码目录:D:\Qt\5.15.2\Src\qtbase\src\plugins\sqldrivers\psql,然后进入,如下图:
在这里插入图片描述
2、用qt creator打开psql.pro工程,如下图:
在这里插入图片描述
3、选择64位的编译套件,然后点击“Configure Project”,打开工程代码如下:
在这里插入图片描述
4、鼠标右键点击工程psql,在弹出菜单中选择添加库,弹出如下对话框:
在这里插入图片描述
5、选择“外部库”,然后点击“下一步”,如下图:
在这里插入图片描述
6、点击库文件后的“浏览…”按钮,选择postgresql安装目录下的lib/libpg.lib,包含路径选择postgresql安装目录下的include,取消“为debug版本添加’d’作为后缀”的勾选,如下图:
在这里插入图片描述
7、点击“下一步”按钮,如下图:
在这里插入图片描述
8、点击“完成”按钮,查看.pro文件的变化如下:
在这里插入图片描述
9、把项目构建方式改为release,然后鼠标右键点击工程psql,在弹出菜单中选择“构建”或“重新构建”。构建完毕后,如下图:
在这里插入图片描述
10、通过分析编译输出的日志,可以分析出,驱动编译完毕生成的dll所在的目录为:D:\plugins\sqldrivers,如下图:
在这里插入图片描述
至此驱动的编译过程就结束了。

3、让QT的程序能找到编译好的驱动

qt工程在编译是默认寻找数据库驱动的路径(注意项目使用的编译套件是MinGw 64位的)是:D:\Qt\5.15.2\mingw81_64\plugins\sqldrivers,因此需要把上一步编译生成的3个文件libqsqlpsql.a、qsqlpsql.dll、qsqlpsql.dll.debug复制到D:\Qt\5.15.2\mingw81_64\plugins\sqldrivers目录下。如下图:
在这里插入图片描述

4、复制依赖的数据库动态库

1、qt对不同的数据库所依赖的dll的数量不一样,像MySql主要就是依赖1个libmysql.dll,但是对于PostgreSql 14.6依赖的dll包含:
以下为必须

  • libcrypto-1_1-x64.dll
  • libiconv-2.dll
  • libintl-9.dll
  • libpg.dll
  • libssl-1_1-x64.dll

以下2个可选

  • liblz4.dll
  • libxml2.dll

2、需要把必须的dll从postgresql安装目录下D:/pgsql/bin复制到QT项目的输出目录中,如下图:
在这里插入图片描述
3、为了避免每个QT项目都需要复制这几个dll,可以把这几个dll复制到QT编译套件的bin目录下,我的用编译套件为MinGw 64位,对应的目录为D:/Qt/5.15.2/mingw81_64/bin,如下图:
在这里插入图片描述

5、访问数据库运行成功

写一个访问postgresql数据库的demo工程,关键代码如下:

void Widget::on_btnDbTest_clicked()
{

    QStringList driverList = QSqlDatabase::drivers();
    qDebug() << driverList;

    QSqlDatabase  db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("192.168.0.15");
    db.setPort(5432);
    db.setUserName("postgres");
    db.setPassword("postgres");

//    QSqlDatabase  db = QSqlDatabase::addDatabase("QMYSQL");
//    db.setHostName("localhost");
//    db.setPort(3306);
//    db.setUserName("root");
//    db.setPassword("mesnac@123");

    if (!db.open())
    {
        qDebug() << "数据库连接失败!";
        QMessageBox::information(this, "提示", "失败");
    }
    else
    {
        qDebug() << "数据库连接成功!";
        QMessageBox::information(this, "提示", "成功");
    }
}

运行效果如下:
在这里插入图片描述


http://www.niftyadmin.cn/n/168207.html

相关文章

GPT系列模型技术路径演进

目录前言TransformerGPT-1BERTGPT-2GPT-3InstructGPT/ChatGPTGPT-4类ChatGPT产品Google Bard&#xff08;诗人&#xff09;facebook LLaMA(羊驼)复旦 MOSS清华 ChatGLM-6B/130B百度 文心一言总结参考&#xff1a;前言 人工智能发展的历程如上图所示&#xff0c;从基于规则统计方…

人工智能多模态方向学习笔记-SHOW AND TELL算法

简介 Show and Tell是一种基于深度学习的图像标注算法&#xff0c;它通过将图像和其对应的描述文本映射到同一向量空间中&#xff0c;实现了图像到自然语言的转换。 具体来说&#xff0c;Show and Tell算法的模型架构包括一个卷积神经网络&#xff08;CNN&#xff09;和一个循…

【Python】字典

字典是 无序、键不重复且元素只能是键值对的可变的一个容器。 怎么理解可变和不可变&#xff0c;简单来说&#xff0c;就是元素是否可以被更改。data { "k1":1, "k2":2 }元素必须键值对 键不重复&#xff0c;重复则会被覆盖 data { "k1":1, &q…

可观测性-可视化-Grafana的表格(table)类型图表中,在列上要显示“多少天前”

在Grafana的表格&#xff08;table&#xff09;类型图表中&#xff0c;在列上要显示“多少天前” 需求&#xff1a;在Grafana的表格&#xff08;table&#xff09;类型图表中&#xff0c;在列上要显示“多少天前” 先来看下效果图 前提&#xff1a;首先measurement中要有业务…

项目管理软件中使用文件共享的重要性

文件共享是计算机数据、数字媒体、文档和其他电子文件从一个人或计算机到另一台计算机的公开或私人共享。文件共享只是意味着多个人或计算机和移动设备可以同时访问同一个文件。 访问类型可能包括读取或查看文件、编辑或修改文件、复制或打印文件的能力。文件共享通常通过各种…

短链系统怎么设计?

短链服务的鼻祖是TinyURL&#xff0c;是最早提供短链服务的网站&#xff0c;目前国内也有很多短链服务&#xff1a;新浪&#xff08;t.cn&#xff09;、百度&#xff08;dwz.cn&#xff09;、腾讯&#xff08;url.cn&#xff09;等等。 短链的好处 太长的链接容易被限制长度短…

RabbitMQ学习(一)中间件技术、消息队列协议、持久化、分发策略、高可用与高可靠、入门与安装、角色分类

中间件技术与分布式架构 分布式中间件 消息中间件 类型&#xff1a;ActiveMQ、RabbitMQ、Kafka、RocketMQ 场景&#xff1a;消息中间件监控数据 、异步数据传输场景、流量削峰、任务调度、海量数据同步、分布式事务、日志管理、大数据分析与传递、数据的分发与异步处理 协议…

ANR分析流程

一、ANR基本知识 1.1、发生原因 一句话总结&#xff1a;没有在规定的时间内&#xff0c;干完要干的事情&#xff0c;就会发生ANR。 1.2、ANR分类 从发生的场景分类&#xff1a; Input事件超过5s没有被处理完Service处理超时&#xff0c;前台20s&#xff0c;后台200sBroadc…