阅读目录先实现libpq链接postgresql然后再实现libpqxxlibpqxx依赖于libpqlibpq的使用在下面最后一节1、设置环境变量2、cmake进行配置记得创建build目录3、Build 和Install4、复制生成的lib和include到项目下然后配置5、测试代码在window上c 使用libpq连接postgresql怎么操作需求是按照libpqxx版本c 17版本我用c20版本也测试了ok。libpqxx 7.7.5postgresql是15版本postgresql安装路径C:\Program Files\PostgreSQL\15回到顶部先实现libpq链接postgresql然后再实现libpqxxlibpqxx依赖于libpqlibpq的使用在下面最后一节回到顶部1、设置环境变量直接用powershell输入环境变量然后关闭后在重新打开一个新的setx PostgreSQL_LIBRARY C:\path\to\libpq.lib setx PostgreSQL_INCLUDE_DIR C:\path\to\include报错了原因就是因为没有设置环境变量View Code回到顶部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 -G Visual Studio 17 2022 / -D CMAKE_BUILD_TYPERelease / -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_PREFIXC:/Usr/local/cxx_17/libpqxx / -D CMAKE_CXX_STANDARD17 / -A x64cmake -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_PREFIXC:/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 dbnameteacher userpostgres passwordxxx hostaddr127.0.0.1 port5432; // 创建连接对象 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; }这时候代码报错严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 __imp_ioctlsocket函数 public: void __cdecl pqxx::connection::set_blocking(bool) (?set_blockingconnectionpqxxQEGAAX_NZ) 中引用了该符号 cxx_20_pqxx C:\Opt\cxx_20_pqxx\pqxx.lib(connection.obj) 1 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 __imp_WSAGetLastError函数 public: void __cdecl pqxx::connection::set_blocking(bool) (?set_blockingconnectionpqxxQEGAAX_NZ) 中引用了该符号 cxx_20_pqxx C:\Opt\cxx_20_pqxx\pqxx.lib(connection.obj) 1 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2019 无法解析的外部符号 __imp_WSAPoll函数 void __cdecl pqxx::internal::wait_fd(int,bool,bool,unsigned int,unsigned int) (?wait_fdinternalpqxxYAXH_N0IIZ) 中引用了该符号 cxx_20_pqxx C:\Opt\cxx_20_pqxx\pqxx.lib(wait.obj) 1解决方案参考了这个链接https://blog.csdn.net/woshihuguangbao/article/details/52770136就是将ws2_32.lib 和winmm.lib添加到链接器里面即可。但是我没有在任何地方找到这两个lib呀好奇怪。结果很ok回到顶部在window上c 使用libpq连接postgresql怎么操作1、安装postgresql数据库2、vs2022上引入类库include和lib和bin里面的dll文件1include2lib引入3引入bin里面的dll文件到debug里面4查询#include stdio.h #include stdlib.h #include libpq-fe.h #include iostream #include chrono std::chrono::high_resolution_clock::time_point start_time() { // 开始时间 auto start std::chrono::high_resolution_clock::now(); return start; } std::chrono::high_resolution_clock::time_point end_time(std::chrono::high_resolution_clock::time_point start) { // 结束时间 auto end std::chrono::high_resolution_clock::now(); auto duration std::chrono::duration_caststd::chrono::seconds(end - start).count(); std::cout Execution time: duration s std::endl; return end; } int main() { // 开始时间 auto start start_time(); PGconn* conn; PGresult* res; // 连接到数据库 conn PQconnectdb(dbnameteacher userpostgres passwordxxx hostaddr127.0.0.1 port5432); if (PQstatus(conn) ! CONNECTION_OK) { fprintf(stderr, 连接到数据库失败: %s\n, PQerrorMessage(conn)); PQfinish(conn); exit(1); } // 执行查询 // res PQexec(conn, select \PJYWT01\, \PJYWT02\, \PJYWT03\, \PJYWT04\, \PJYWT05\, \PJYWT06\, \PJYWT07\, \PJYWT08\, \PJYWT09\ from parent_pl_20230417;); res PQexec(conn, select \PJYWT01\, \PJYWT02\, \PJYWT03\, \PJYWT04\, \PJYWT05\, \PJYWT06\, \PJYWT07\, \PJYWT08\, \PJYWT09\ from parent_pl_20230417;); if (PQresultStatus(res) ! PGRES_TUPLES_OK) { fprintf(stderr, 查询失败: %s\n, PQerrorMessage(conn)); PQclear(res); PQfinish(conn); exit(1); } // 处理查询结果 int rows PQntuples(res); int cols PQnfields(res); int a 0; for (int i 0; i rows; i) { //for (int j 0; j cols; j) { // printf(%s\t, PQgetvalue(res, i, j)); //} // printf(\n); a; } // 释放资源 PQclear(res); PQfinish(conn); std::cout a : a std::endl; std::cout 数据查询时间: std::endl; auto show_time end_time(start); return 0; }