VS環境配置
1. 項目 -> 屬性頁,鏈接器輸入附加依賴(libpq.lib);
2. 配置包含目錄(include),點擊編輯進入,找到postgresql的安裝目錄,選擇include文件即可;
3. 配置庫目錄(lib),點擊編輯進入,找到postgresql的安裝目錄,選擇lib文件即可;
4. 鏈接器輸入附加依賴(libpq.lib),點擊編輯進入,在紅框位置輸入libpq.lib
即可;
5. 在postgresql安裝目錄的bin文件夾中找到libcrypto-1_1-x64
、libiconv-2.dll
、libintl-8.dll
、libpq.dll
、libssl-1_1-x64.dll
,導入工程目錄;
6. 在要使用到數據庫的cpp文件中假如頭文件#include <libpq-fe.h>
連接數據庫
1. 如何建立數據庫不在該文章中,請自行搜索;
2. 代碼,詳細解釋請看注釋
//host一般是127.0.0.1,dbname是需要連接數據庫的名字,user和password是創建數據庫時或后續添加的用戶名和密碼
PGconn* conn = PQconnectdb("host=127.0.0.1 dbname=XXX user=XXX password=XXX");
//一般情況下,連接已經成功,但是還是需要進行一下判斷
//PQstatus(conn)判斷連接狀態,CONNECTION_BAD為狀態參數
//PQerrorMessage(conn)為連接的錯誤信息
//PQfinish(conn)結束連接
//想要詳細了解函數方法和狀態參數含義,可以按ctrl的同時,鼠標點擊該函數或參數即可查看
if (PQstatus(conn) == CONNECTION_BAD) {
cout << PQerrorMessage(conn) << endl;
PQfinish(conn);
}
增刪查改語句
注意不同語句需要判斷錯誤的函數不一定相同
1. 增,INSERT
//制作sql語句
//注意假如要加入的是int類型,可使用to_string(int)函數轉換成string類型
//字段為varchar等,要使用單引號;字段為int等數字,不用使用單引號
string sqlStr = "INSERT INTO table (XXX) VALUES(" + XXX + ")";
char* sql = const_cast<char*>(sqlStr.c_str());
//PQexec執行語句
PGresult* res = PQexec(conn, sql);
//PQresultStatus(res)是獲取結果的狀態,PGRES_COMMAND_OK是狀態參數
//PQresultErrorMessage(res)可以獲取錯誤信息
//PQclear(res)是清除res,不然會內存泄漏
//想要詳細了解函數方法和狀態參數含義,可以按ctrl的同時,鼠標點擊該函數或參數即可查看
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
cout << PQresultErrorMessage(res) << endl;
PQclear(res);
return;
}
2. 刪,DELETE
string sqlStr = "DELETE FROM table WHERE XXX = " + XXX + ";";
char* sql = const_cast<char*>(sqlStr.c_str());
PGresult* res = PQexec(conn, sql);
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
cout << PQresultErrorMessage(res) << endl;
PQclear(res);
return;
}
3. 查,SELECT
PGresult* res = PQexec(conn, "SELECT XX1, XX2, FROM table");
//注意這里的狀態參數和其余三個基本語句不相同
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
cout << PQresultErrorMessage(res) << endl;
PQclear(res);
return;
}
//PQntuples(res)是行數
//PQnfields(res)是列數
//PQgetvalue(res, i, j)是取值函數
for (int i = 0; i < PQntuples(res); i++) {
for (int j = 0; j < PQnfields(res); j++)
cout << PQgetvalue(res, i, j) << " ";
}
PQclear(res);
//如果明確只有一個字段的一個元組返回
//可以直接使用PQgetvalue(res, 0, 0)
4. 改,UPDATE
string sqlStr = "UPDATE table SET XXX = " + XXX + ";";
char* sql = const_cast<char*>(sqlStr.c_str());
PGresult* res = PQexec(conn, sql);
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
cout << PQresultErrorMessage(res) << endl;
PQclear(res);
return;
}