需求是按照libpqxx
版本:
c++ 17版本
libpqxx 7.7.5
postgresql是15版本
postgresql安装路径:C:\Program Files\PostgreSQL\15
1、设置环境变量
直接用powershell输入环境变量,然后关闭后在重新打开一个新的
setx PostgreSQL_LIBRARY "C:\path\to\libpq.lib" setx PostgreSQL_INCLUDE_DIR "C:\path\to\include"
报错了,原因就是因为没有设置环境变量
PS C:\Usr\local\17_安装包\libpqxx-7.7.5\libpqxx-7.7.5> cmake -S C:/Usr/local/17_安装包/libpqxx-7.7.5/libpqxx-7.7.5 -B C:/Usr/local/17_安装包/libpqxx-7.7.5/libpqxx-7.7.5/build -G "Visual Studio 17 2022" -A x64 -- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.19045. -- The CXX compiler identification is MSVC 19.36.32532.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.36.32532/bin/Hostx64/x64/cl.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done CMake Error at C:/Program Files/CMake/share/cmake-3.26/Modules/FindPackageHandleStandardArgs.cmake:230 (message): Could NOT find PostgreSQL (missing: PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR) Call Stack (most recent call first): C:/Program Files/CMake/share/cmake-3.26/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE) C:/Program Files/CMake/share/cmake-3.26/Modules/FindPostgreSQL.cmake:272 (find_package_handle_standard_args) cmake/config.cmake:26 (find_package) CMakeLists.txt:27 (include) -- Configuring incomplete, errors occurred!
2、cmake进行配置,记得创建build目录
模板
cmake -S /path/to/source -B /path/to/build -DCMAKE_INSTALL_PREFIX=/path/to/installation/folder -G "Visual Studio 17 2022" -A x64
/path/to/source
替换为你的源代码目录路径
/path/to/build
替换为你的构建目录路径
/path/to/installation/folder
替换为你希望安装文件的目标文件夹路径
-G "Visual Studio 16 2022"
指定生成 Visual Studio 2022 的解决方案和项目文件。
-A x64
指定生成 64 位的项目文件。
cmake -S C:/Usr/local/17_安装包/libpqxx-7.7.5/libpqxx-7.7.5 -B C:/Usr/local/17_安装包/libpqxx-7.7.5/libpqxx-7.7.5/build -D CMAKE_INSTALL_PREFIX=C:/Usr/local/cxx_17/libpqxx -G "Visual Studio 17 2022" -A x64
3、Build 和Install
4、复制生成的lib和include到项目下,然后配置
5、测试代码
#include <iostream> #include <pqxx/pqxx> int get_data_postgre() { try { // 连接信息 std::string conninfo = "dbname=teacher user=postgres password=123123qwe hostaddr=127.0.0.1 port=5432"; // 创建连接对象 pqxx::connection conn(conninfo); // 检查连接状态 if (conn.is_open()) { std::cout << "连接成功!" << std::endl; // 创建事务对象 pqxx::work txn(conn); // 执行查询语句 pqxx::result result = txn.exec("select \"PJYWT01\", \"PJYWT02\", \"PJYWT03\", \"PJYWT04\", \"PJYWT05\", \"PJYWT06\", \"PJYWT07\", \"PJYWT08\", \"PJYWT09\" from parent_pl_20230417;"); // 遍历结果集 for (const auto& row : result) { for (const auto& field : row) { std::cout << field.c_str() << " "; } std::cout << std::endl; } // 提交事务 txn.commit(); } else { std::cout << "连接失败!" << std::endl; } } catch (const std::exception& e) { std::cerr << "发生异常: " << e.what() << std::endl; } return 0; }