主題

【筆記】使用C++透過libpqxx連接PostgreSQL教學

SamChu | 2021-04-18 04:34:52 | 巴幣 22 | 人氣 79

這兩天在幫我的遊戲加上排行榜
規劃是在Heroku上面架PostgreSQL的Database,然後用C++來撈資料
但是關於用C++連線PostgreSQL的中文文章很多都是英文直接翻譯,而且大部分沒有很仔細
所以自己寫一篇做個紀錄
本篇文章是透過libpqxx提供的api來連接的,libpqxx是PostgreSQL官方提供給C++的API

前置作業
首先先到libpqxx的Github頁面取得Source code
之後請先安裝CMake
然後安裝PostgreSQL

取得libpqxx庫
首先打開CMake然後選擇剛剛libpqxx原始碼的資料夾位置,輸出就隨便選一個目標資料夾

之後就可以得到libpqxx的專案檔,再來是要來build api庫
用Visual Studio打開libpqxx.sln
注意這邊要用系統管理員打開Visual Studio

由於最新的libpqxx有用到C++ 20的一些東西,所以要先改語言
把全部solution框起來右鍵->Properties
在General -> C++ Language Standard裡面,選擇Preview - Features from the Latest C++ Working Draft (std:c++latest)

然後上面選擇Release跟x64

之後就可以先在ALL_BUILD這個專案下按右鍵,選擇Build來跑一次
如果沒有問題的話就在INSTALL的專案下再Build一次
如果INSTALL有error的話有可能是沒有用系統管理員打開Visual Studio
成功之後就能在C:\Program Files\libpqxx底下找到build出來的東西

目標專案修改
再來打開你打算在連線資料庫的專案中,我們要來連接一些lib
首先先照上面方法把C++改成C++ 20

然後一樣在目標專案Properties -> C/C++ -> Additional Include Directories
把剛剛build出來的資料夾裡面的include貼上去
C:\Program Files\libpqxx\include

接下來去Properties -> Linker -> Additional Library Directories
加上以下兩個路徑
C:\Program Files\libpqxx\lib    一樣是剛剛build出來的東西
C:\Program Files\PostgreSQL\13\lib   如果一開始有裝PostgreSQL的話應該能夠找到

然後Properties -> Linker -> Input -> Additional Dependencies
加上以下幾個lib
libpq.lib; pqxx.lib; ws2_32.lib; wsock32.lib;   空格記得去掉

全部都修改完之後先Run一次試試看,確定目前還能夠跑過,記得用Release

C++呼叫API
在Cpp裡面引入#include <pqxx/pqxx>
pqxx::connection connectionObject("host=localhost port=5432 dbname=test user=postgres password =123454321");
把字串裡面的換成自己資料庫的資訊
之後利用pqxx::work跟pqxx::result來取得資料,以下是簡單範例
pqxx::work worker(connectionObject);
pqxx::result response = worker.exec("SELECT * FROM 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;
}

如果不能compile的話試著改電腦的環境變數
在path底下新增兩個路徑之後重開機
C:\Program Files\PostgreSQL\13\lib
C:\Program Files\PostgreSQL\13\bin

執行檔
當你完成你的專案之後,由於其他電腦可能沒有安裝PostgreSQL,所以需要一些dll
C:\Program Files\PostgreSQL\13\lib以及C:\Program Files\PostgreSQL\13\bin底下
找到以下五個檔案(似乎每個版本需要的都不太一樣,這幾個是我自己試出來的)
libcrypto-1_1-x64.dll
libiconv-2.dll
libintl-8.dll
libpq.dll
libssl-1_1-x64.dll
把全部dll放到執行檔同一個資料夾底下,就能夠在沒有安裝PostgreSQL的電腦執行了

參考

創作回應

更多創作