• QT6.5.2编译PostgreSql驱动


    一、环境

    1、操作系统:win11

    2、qt版本:6.5.2

    3、PostgreSql版本:14.9

    二、下载qbase源码

    1、下载地址:https://github.com/qt/qtbase/tree/6.5.2

     将下载的源码文件解压指定的的目录,找到src/plugins/sqldrivers根据自己的实际情况放置,本次我使用的目录如下:

    三、编译驱动

    1、编译文件配置

          进入sqldrivers目录

         (1)配置.make.conf文件

    1. set(QT_REPO_MODULE_VERSION "6.5.2")
    2. # 开启pg插件
    3. SET(FEATURE_sql_psql ON)
    4. #pg驱动头文件
    5. SET(PostgreSQL_INCLUDE_DIR "E:/software/QT/src/pgsql14.9/include")
    6. #pg动态库引导文件
    7. SET(PostgreSQL_LIBRARY "E:/software/QT/src/pgsql14.9/lib/libpq.lib")
    8. #mysql驱动编译配置
    9. #SET(FEATURE_sql_mysql ON)
    10. #SET(MySQL_INCLUDE_DIR "E:/software/QT/src/mysql8.0/include")
    11. #SET(MySQL_LIBRARY "E:/software/QT/src/mysql8.0/lib/libmysql.lib")

       (2)配置CmakeLists.txt

    1. cmake_minimum_required(VERSION 3.16)
    2. if (NOT CMAKE_PROJECT_NAME STREQUAL "QtBase" AND NOT CMAKE_PROJECT_NAME STREQUAL "Qt")
    3. include(.cmake.conf)
    4. project(QSQLiteDriverPlugins
    5. VERSION "${QT_REPO_MODULE_VERSION}"
    6. DESCRIPTION "Qt6 SQL driver plugins"
    7. HOMEPAGE_URL "https://qt.io/"
    8. LANGUAGES CXX C ASM
    9. )
    10. find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS
    11. BuildInternals
    12. Core
    13. Sql
    14. )
    15. qt_prepare_standalone_project()
    16. else()
    17. qt_internal_upgrade_cmake_policies()
    18. endif()
    19. qt_feature_module_begin(
    20. NO_MODULE
    21. PUBLIC_FILE "qtsqldrivers-config.h"
    22. PRIVATE_FILE "qtsqldrivers-config_p.h"
    23. )
    24. include(configure.cmake)
    25. add_subdirectory(psql)

    2、QtCretor打开CmakeLists.txt

     

    3、驱动编译

        选择项目右键选择构建,编译成功输入输出日志如下

    4、Qt的mingw配置驱动文件

     将编译好的qsqlpsql.dll文件拷贝至qt的运行目录(我本机目录E:\software\QT\6.5.2\mingw_64\bin),仅仅拷贝这医个文件远远不够,还需要将postgresql运行目录下的几个文件拷贝到qt运行目录

    1. libcrypto-1_1-x64.dll
    2. libiconv-2.dll
    3. libintl-9.dll
    4. libpq.dll
    5. libssl-1_1-x64.dll

     四、连接数据库测试

    1. void intiDb()
    2. {
    3. QStringList drivers = QSqlDatabase::drivers();
    4. qDebug() << drivers;
    5. QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    6. db.setHostName("server200");
    7. db.setDatabaseName("qt_db");
    8. db.setUserName("postgres");
    9. db.setPassword("123456");
    10. bool isOk = db.open();
    11. qDebug() << (isOk?"连接postgresql成功":"连接postgresql失败") <<
    12. (isOk?"":db.lastError().text()) ;
    13. QSqlQuery sqlQuery;
    14. sqlQuery.exec("SELECT id,name,age FROM t_test");
    15. while(sqlQuery.next())
    16. {
    17. qDebug() << sqlQuery.value("id").toInt() << " " <<
    18. sqlQuery.value("name").toString() << "" << sqlQuery.value("age").toInt() ;
    19. }

     至此大功告成

  • 相关阅读:
    python工具-c-struct-decode
    “2022年度科技行业CEO”!
    LeetCode 646 最长数对链[贪心 自定义排序] HERODING的LeetCode之路
    java计算机毕业设计校园环境保护监督系统源代码+系统+数据库+lw文档
    Modbus TCP/RTU协议转PROFINET协议网关
    创建对象在堆区如何分配内存
    Qt使用OpenCv
    蒙特卡洛树搜索方法介绍——后台规划(background planning)与决策时规划(decision-time planning)
    【自然语言处理概述】“海量”文件遍历
    如何选择全面型企业备份软件以提高数据可用性?
  • 原文地址:https://blog.csdn.net/fengchengwu2012/article/details/133275574