C++?通過pqxxlib庫鏈接?PostgreSql數(shù)據(jù)庫的詳細過程
C++ 通過pqxxlib庫鏈接 PostgreSql數(shù)據(jù)庫
一. 編譯pqxx(老版本)
1. libpqxx簡介
libpqxx是官方發(fā)布基于C++語言操作PostgreSQL的API庫,簡單地講就是用C++來操作PostgreSQL數(shù)據(jù)庫。
2. 編譯環(huán)境搭建
2.1 PostgreSql下載安裝
我安裝PostgreSql路徑為D:\Program Files\PostgreSQL\14, 安裝路徑最好沒有空格,空格會使后面修改配置文件有點麻煩;要使用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 Files\PostgreSQL\14 , 修改為如下內容:

(3)修改include相關配置
#LIBPQINC=$(PGSQLSRC)\interfaces\libpq LIBPQINC=$(PGSQLSRC)\include
(4)修改Release相關配置
#LIBPQPATH=$(PGSQLSRC)\interfaces\libpq\Release #LIBPQDLL=libpq.dll #LIBPQLIB=libpqdll.lib LIBPQPATH=$(PGSQLSRC)\lib LIBPQDLL=libpq.dll LIBPQLIB=libpq.lib
(5)修改Debug相關配置
#LIBPQDPATH=$(PGSQLSRC)\interfaces\libpq\Debug #LIBPQDDLL=libpqd.dll #LIBPQDLIB=libpqddll.lib LIBPQDPATH=$(PGSQLSRC)\lib LIBPQDDLL=libpq.dll LIBPQDLIB=libpq.lib
頭文件拷貝
將libpqxx\config\sample-headers\compiler\VisualStudio2013\pqxx\目錄下的所有頭文件拷貝到libpqxx\include\pqxx目錄下; 這里不管你安裝的是vs 2017還是2019;都能成功
3. 編譯
(1)系統(tǒng)中查找nmake.exe,拷貝下這個位置,我機器位置:D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\nmake.exe
(2)開始菜單,選擇對應的vs2019命令行并系統(tǒng)管理員身份運行

(3)cd進入到libpgxx根目錄下
f: cd temp\libpqxx\

(4)執(zhí)行編譯命令格式
"D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\nmake.exe" /f win32/vc-libpqxx.mak ALL.
(5)編譯成功后會產(chǎn)生一個lib目錄,里面保存著靜態(tài)鏈接庫的debug/release及動態(tài)鏈接庫的debug/release文件。

二. 配置vc項目
Visual Studio的配置
1.在VS的工程屬性配置對話框中展開“VC++目錄”項。在“包含目錄”子項添加libpqxx根目錄下的include目錄,在“庫目錄”子項添加libpqxx根目錄下的lib目錄。


除了使用上述的絕對路徑以外,也可以通過環(huán)境變量進行設置,后者的方法較為靈活。方法是新建一環(huán)境變量“libpqxx”,變量值為libpqxx的根目錄,如下圖。然后就可以在上述的設置中用$(libpqxx)來表示這一路徑了。

2.在VS的工程屬性配置對話框中配置“鏈接器->輸入->附加依賴項”項,添加靜態(tài)庫,注意需針對Debug版本及Release版本分別添加。Debug版本添加的庫為libpqxxD.lib和libpq.lib;Release版本添加的庫為libpqxx.lib和libpq.lib。


3.將以下dll文件拷貝至工程的編譯輸出目錄,以供程序調用。
libpqxx根目錄的lib文件夾下的:
libpq.dll
libpqxx.dll
libpqxxD.dll
PostgreSQL安裝目錄的bin文件夾下的:
libcrypto-1_1.dll
libiconv-2.dll
libintl-8.dll
libssl-1_1.dll
4.在VC++工程的源文件中包含libpqxx的頭文件
#include <pqxx/pqxx>
三. 編譯pqxx(新版本)
需要用到的軟件和源碼
- CMake (cmake-gui), 下載最新和自己系統(tǒng)匹配的
- 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工程

修改為下面的配置:最新的語言標準.
修改pqxx和ALL_BUILD的屬性為


Make ALL_BUILD 在 INSTALL builds. Libpqxx must be installed in C:\Program Files\libpqxx

編譯好的文件

編譯好libpqxx, 哪我們就來使用它了,創(chuàng)建一個工程, 配置:附加包含目錄為:C:\Program Files\libpqxx\include; 附加庫目錄有2個:C:\Program Files\libpqxx\lib,D:\Program Files\PostgreSQL\14\lib;附加依賴項:libpq.lib;pqxx.lib;ws2_32.lib;wsock32.lib;



代碼如下:
#pragma once
#include <string>
#include <iostream>
#include <pqxx/pqxx>
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 << "Id: " << response[i][0] << " Username: " << response[i][1] << " Password: " << response[i][2] << " Email: " << response[i][3] << std::endl;
}
}
catch (const std::exception& e)
{
std::cerr << e.what() << std::endl;
}
system("pause");
return 0;
}
運行

把程序放到其他電腦上運行,需要用到的依賴文件有,可以到Postgresql安裝目錄下面找;

如果在其他電腦運行時出現(xiàn)如下的情況,看不到錯誤提示:

在資源管理器中選項里面把隱藏的東西都給取消掉,重啟,就能看到錯誤提示了


到此這篇關于C++ 通過pqxxlib庫鏈接 PostgreSql數(shù)據(jù)庫的文章就介紹到這了,更多相關C++ PostgreSql數(shù)據(jù)庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++宏函數(shù)和內聯(lián)函數(shù)的使用
本文主要介紹了C++宏函數(shù)和內聯(lián)函數(shù)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07
詳解C/C++ Linux出錯處理函數(shù)(strerror與perror)的使用
我們知道,系統(tǒng)函數(shù)調用不能保證每次都成功,必須進行出錯處理,這樣一方面可以保證程序邏輯正常,另一方面可以迅速得到故障信息。本文主要為大家介紹兩個出錯處理函數(shù)(strerror、perror)的使用,需要的可以參考一下2023-01-01
Qt?自定義屬性Q_PROPERTY不顯示float類型的解決
這篇文章主要介紹了Qt?自定義屬性Q_PROPERTY不顯示float類型的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
C語言實現(xiàn)數(shù)據(jù)結構串(堆分配存儲表示法)實例詳解
這篇文章主要介紹了C語言實現(xiàn)數(shù)據(jù)結構串(堆分配存儲表示法)實例詳解的相關資料,需要的朋友可以參考下2017-07-07
Qt圖形圖像開發(fā)曲線圖表模塊QChart庫基本用法、各個類之間的關系說明
這篇文章主要介紹了Qt圖形圖像開發(fā)曲線圖表模塊QChart庫基本用法、各個類之間的關系說明,需要的朋友可以參考下2020-03-03

