WIN10環境下VS2019C++訪問PostgreSQL數據庫及增刪查改語句


VS環境配置

1. 項目 -> 屬性頁,鏈接器輸入附加依賴(libpq.lib);



2. 配置包含目錄(include),點擊編輯進入,找到postgresql的安裝目錄,選擇include文件即可;



3. 配置庫目錄(lib),點擊編輯進入,找到postgresql的安裝目錄,選擇lib文件即可;


4. 鏈接器輸入附加依賴(libpq.lib),點擊編輯進入,在紅框位置輸入libpq.lib即可;



5. 在postgresql安裝目錄的bin文件夾中找到libcrypto-1_1-x64libiconv-2.dlllibintl-8.dlllibpq.dlllibssl-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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM