C++?通過pqxxlib庫鏈接?PostgreSql數(shù)據(jù)庫的詳細(xì)過程
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
, 安裝路徑最好沒有空格,空格會使后面修改配置文件有點(diǎn)麻煩;要使用Dos格式的路徑,在這里我都花了些時間
2.2 libpqxx下載
直接從github下載libpqxx,我們使用的libpqxx6.4.7,下載命令如下:
git clone --branch 6.4.7 https://github.com/jtv/libpqxx.git
2.3 編譯前的準(zhǔn)備
修改配置文件
(1)下載下來的libpqxx壓縮包,在文件夾win32中common-sample,復(fù)制一份命名為common;
(2)使用記事本打開common文件,修改PGSQLSRC的值為PostgreSql安裝的根目錄(安裝路徑),比如我的電腦按默認(rèn)安裝是 D:\Program Files\PostgreSQL\14
, 修改為如下內(nèi)容:
(3)修改include相關(guān)配置
#LIBPQINC=$(PGSQLSRC)\interfaces\libpq LIBPQINC=$(PGSQLSRC)\include
(4)修改Release相關(guān)配置
#LIBPQPATH=$(PGSQLSRC)\interfaces\libpq\Release #LIBPQDLL=libpq.dll #LIBPQLIB=libpqdll.lib LIBPQPATH=$(PGSQLSRC)\lib LIBPQDLL=libpq.dll LIBPQLIB=libpq.lib
(5)修改Debug相關(guān)配置
#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,拷貝下這個位置,我機(jī)器位置:D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\nmake.exe
(2)開始菜單,選擇對應(yīng)的vs2019命令行并系統(tǒng)管理員身份運(yùn)行
(3)cd進(jìn)入到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項(xiàng)目
Visual Studio的配置
1.在VS的工程屬性配置對話框中展開“VC++目錄”項(xiàng)。在“包含目錄”子項(xiàng)添加libpqxx根目錄下的include目錄,在“庫目錄”子項(xiàng)添加libpqxx根目錄下的lib目錄。
除了使用上述的絕對路徑以外,也可以通過環(huán)境變量進(jìn)行設(shè)置,后者的方法較為靈活。方法是新建一環(huán)境變量“libpqxx”,變量值為libpqxx的根目錄,如下圖。然后就可以在上述的設(shè)置中用$(libpqxx)來表示這一路徑了。
2.在VS的工程屬性配置對話框中配置“鏈接器->輸入->附加依賴項(xiàng)”項(xiàng),添加靜態(tài)庫,注意需針對Debug版本及Release版本分別添加。Debug版本添加的庫為libpqxxD.lib和libpq.lib;Release版本添加的庫為libpqxx.lib和libpq.lib。
3.將以下dll文件拷貝至工程的編譯輸出目錄,以供程序調(diào)用。
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
文件夾內(nèi)容如下:
運(yùn)行 Visual Studio 2019
打開build
下面的libpqxx.sln
工程
修改為下面的配置:最新的語言標(biāo)準(zhǔn).
修改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
;附加依賴項(xiàng):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; }
運(yùn)行
把程序放到其他電腦上運(yùn)行,需要用到的依賴文件有,可以到Postgresql
安裝目錄下面找;
如果在其他電腦運(yùn)行時出現(xiàn)如下的情況,看不到錯誤提示:
在資源管理器中選項(xiàng)里面把隱藏的東西都給取消掉,重啟,就能看到錯誤提示了
到此這篇關(guān)于C++ 通過pqxxlib庫鏈接 PostgreSql數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)C++ PostgreSql數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++宏函數(shù)和內(nèi)聯(lián)函數(shù)的使用
本文主要介紹了C++宏函數(shù)和內(nèi)聯(lián)函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07C++中關(guān)于Crt的內(nèi)存泄漏檢測的分析介紹
本篇文章介紹了,在C++中關(guān)于Crt的內(nèi)存泄漏檢測的分析說明。需要的朋友參考下2013-04-04詳解C/C++ Linux出錯處理函數(shù)(strerror與perror)的使用
我們知道,系統(tǒng)函數(shù)調(diào)用不能保證每次都成功,必須進(jìn)行出錯處理,這樣一方面可以保證程序邏輯正常,另一方面可以迅速得到故障信息。本文主要為大家介紹兩個出錯處理函數(shù)(strerror、perror)的使用,需要的可以參考一下2023-01-01Qt?自定義屬性Q_PROPERTY不顯示float類型的解決
這篇文章主要介紹了Qt?自定義屬性Q_PROPERTY不顯示float類型的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11C語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)串(堆分配存儲表示法)實(shí)例詳解
這篇文章主要介紹了C語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)串(堆分配存儲表示法)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07Qt圖形圖像開發(fā)曲線圖表模塊QChart庫基本用法、各個類之間的關(guān)系說明
這篇文章主要介紹了Qt圖形圖像開發(fā)曲線圖表模塊QChart庫基本用法、各個類之間的關(guān)系說明,需要的朋友可以參考下2020-03-03C++中rapidjson將map轉(zhuǎn)為json的方法
今天小編就為大家分享一篇關(guān)于C++中rapidjson將map轉(zhuǎn)為json的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04