C++ 通过pqxxlib库链接 PostgreSql数据库的详细过程

2023年 8月 11日 34.1k 0

目录
  • c++ 通过pqxxlib库链接 postgresql数据库
  • 一. 编译pqxx(老版本)
    • 1. libpqxx简介
    • 2. 编译环境搭建
      • 2.1 Postgresql下载安装
      • 2.2 libpqxx下载
      • 2.3 编译前的准备
    • 3. 编译
    • 二. 配置vc项目
      • 三. 编译pqxx(新版本)
        • 步骤如下:

          C++ 通过pqxxlib库链接 PostgreSql数据库

          一. 编译pqxx(老版本)

          1. libpqxx简介

          libpqxx是官方发布基于C++语言操作PostgreSQL的api库,简单地讲就是用C++来操作PostgreSQL数据库。

          2. 编译环境搭建

          2.1 PostgreSql下载安装

          我安装PostgreSql路径为D:Program FilesPostgreSQL14, 安装路径最好没有空格,空格会使后面修改配置文件有点麻烦;要使用Dos格式的路径,在这里我都花了些时间

          2.2 libpqxx下载

          直接从GitHub下载libpqxx,我们使用的libpqxx6.4.7,下载命令如下:

          git clone --branch 6.4.7 https://github.com/jtv/libpqxx.git

          2.3 编译前的准备

          修改配置文件

          (1)下载下来的libpqxx压缩包,在文件夹win32中common-sample,复制一份命名为common;(2)使用记事本打开common文件,修改PGSQLSRC的值为PostgreSql安装的根目录(安装路径),比如我的电脑按默认安装是 D:Program FilesPostgreSQL14 , 修改为如下内容:

          (3)修改include相关配置

          #LIBPQINC=$(PGSQLSRC)interfaceslibpq
          LIBPQINC=$(PGSQLSRC)include

          (4)修改Release相关配置

          #LIBPQPATH=$(PGSQLSRC)interfaceslibpqRelease
          #LIBPQDLL=libpq.dll
          #LIBPQLIB=libpqdll.lib

          LIBPQPATH=$(PGSQLSRC)lib
          LIBPQDLL=libpq.dll
          LIBPQLIB=libpq.lib

          (5)修改Debug相关配置

          #LIBPQDPATH=$(PGSQLSRC)interfaceslibpqDebug
          #LIBPQDDLL=libpqd.dll
          #LIBPQDLIB=libpqddll.lib

          LIBPQDPATH=$(PGSQLSRC)lib
          LIBPQDDLL=libpq.dll
          LIBPQDLIB=libpq.lib

          头文件拷贝

          libpqxxconfigsample-headerscompilerVisualStudio2013pqxx目录下的所有头文件拷贝到libpqxxincludepqxx目录下; 这里不管你安装的是vs 2017还是2019;都能成功

          3. 编译

          (1)系统中查找nmake.exe,拷贝下这个位置,我机器位置:D:Program Files (x86)Microsoft Visual Studio2019CommUnityVCToolsMSVC14.29.30133binHostx64x64nmake.exe(2)开始菜单,选择对应的vs2019命令行并系统管理员身份运行

          (3)cd进入到libpgxx根目录下

          f:
          cd templibpqxx

          (4)执行编译命令格式

          "D:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133binHostx64x64nmake.exe" /f win32/vc-libpqxx.mak ALL.

          (5)编译成功后会产生一个lib目录,里面保存着静态链接库的debug/release及动态链接库的debug/release文件。

          二. 配置vc项目

          Visual Studio的配置

          1.在VS的工程属性配置对话框中展开“VC++目录”项。在“包含目录”子项添加libpqxx根目录下的include目录,在“库目录”子项添加libpqxx根目录下的lib目录。

          除了使用上述的绝对路径以外,也可以通过环境变量进行设置,后者的方法较为灵活。方法是新建一环境变量“libpqxx”,变量值为libpqxx的根目录,如下图。然后就可以在上述的设置中用$(libpqxx)来表示这一路径了。

          2.在VS的工程属性配置对话框中配置“链接器->输入->附加依赖项”项,添加静态库,注意需针对Debug版本及Release版本分别添加。Debug版本添加的库为libpqxxD.lib和libpq.lib;Release版本添加的库为libpqxx.lib和libpq.lib。

          3.将以下dll文件拷贝至工程的编译输出目录,以供程序调用。libpqxx根目录的lib文件夹下的:libpq.dlllibpqxx.dlllibpqxxD.dll

          PostgreSQL安装目录的bin文件夹下的:libcrypto-1_1.dlllibiconv-2.dlllibintl-8.dlllibssl-1_1.dll

          4.在VC++工程的源文件中包含libpqxx的头文件

          #include

          三. 编译pqxx(新版本)

          需要用到的软件和源码

          • CMake (cmake-gui), 下载最新和自己系统匹配的
          • libpqxx

          步骤如下:

          • 安装CMake-gui;
          • 下载libpqxx

          git clone -b 7.4.1 Https://github.com/jtv/libpqxx.git

          使用cmake 编译 libpqxx, 版本为: Visual Studio 2019 x64 Release

          修改为下面图片,只保留了Release,也可以编译Debug,我是分开来编译的

          最后build文件夹内容如下:

          运行 Visual Studio 2019 打开build下面的libpqxx.sln工程

          修改为下面的配置:最新的语言标准.修改pqxxALL_BUILD的属性为

          Make ALL_BUILD 在 INSTALL builds. Libpqxx must be installed in C:Program Fileslibpqxx

          编译好的文件

          编译好libpqxx, 哪我们就来使用它了,创建一个工程, 配置:附加包含目录为:C:Program Fileslibpqxxinclude; 附加库目录有2个:C:Program Fileslibpqxxlib,D:Program FilesPostgreSQL14lib;附加依赖项:libpq.lib;pqxx.lib;ws2_32.lib;wsock32.lib;

          代码如下:

          #pragma once
          #include
          #include
          #include

          int main()
          {
          std::string connectionString = "dbname=db_test user=admin passWord=123456 hostaddr=ip port=5433";
          try
          {
          pqxx::connection connectionObject(connectionString.c_str());

          pqxx::work worker(connectionObject);

          pqxx::result response = worker.exec("SELECT * FROM zd_users");

          for (size_t i = 0; i < response.size(); i++)
          {
          std::cout

          相关文章

          Oracle如何使用授予和撤销权限的语法和示例
          Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
          下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
          社区版oceanbase安装
          Oracle 导出CSV工具-sqluldr2
          ETL数据集成丨快速将MySQL数据迁移至Doris数据库

          发布评论