C++ 連線pg資料庫

SpringBreath發表於2024-04-22

環境:windows10 vs2022

引入pqxxs

一些增刪改查的示例程式碼

#include "pqxx/pqxx"

void insertPg()
{
    try {
        // 建立連線
        pqxx::connection conn("dbname=postgres user=postgres password=123 hostaddr=127.0.0.1 port=5432");
        // 新增資料
        pqxx::work txn(conn);
        int id = 1;
        txn.exec("INSERT INTO abc (id) VALUES (" + std::to_string(id) + ")");
        txn.commit();
        // 關閉連線
        conn.disconnect();
        
    }
    catch (const std::exception &e) {
        ACOUT(e.what());
    }
}
void deletepg()
{
    try {
        // 建立連線
        pqxx::connection conn("dbname=postgres user=postgres password=123 hostaddr=127.0.0.1 port=5432");

        // 刪除記錄
        pqxx::work txn(conn);
        pqxx::result res = txn.exec("DELETE FROM abc WHERE id = 1");
        int num_deleted = res.affected_rows();
        txn.commit();

        std::stringstream ss;
        ss << "刪除個數: " << num_deleted;
        std::string str = ss.str();
        AcOUT(str.c_str());

        // 關閉連線
        conn.disconnect();
    }
    catch (const std::exception &e) {
        AcOUT(e.what());
    }
}
void updatePg()
{
    try {
        // 建立連線
        pqxx::connection conn("dbname=postgres user=postgres password=123 hostaddr=127.0.0.1 port=5432");

        // 更新記錄
        pqxx::work txn(conn);
        pqxx::result res = txn.exec("UPDATE abc SET id = '789654' WHERE id = 12 RETURNING *");
        txn.commit();

        // 輸出更新的記錄資訊
        for (auto row : res) {
        std::stringstream ss;
        // ss << "id: " << row[0].as<int>() << ", name: " << row[1].as<std::string>();
        ss << "id: " << row[0].as<int>();
        std::string str = ss.str();
            AcOUT(str.c_str());
        }

        // 關閉連線
        conn.disconnect();
    }
    catch (const std::exception &e) {
        std::cerr << e.what() << std::endl;
    }
}

新增,刪除,修改,返回操作的個數

int cPG(std::string SQL) {
    int num = 0;
    try {
		// 建立連線
		pqxx::connection conn("dbname=timespace user=postgres password=asdadsadasdri hostaddr=localhost port=5432");
		// 刪除記錄
		pqxx::work txn(conn);
		{
			pqxx::result result = txn.exec("SET CLIENT_ENCODING TO 'GBK';");
		}
		pqxx::result res = txn.exec(SQL);

		num = res.affected_rows();
		txn.commit();

		std::stringstream ss;
		ss << "運算元據條數: " << num;
		std::string str = ss.str();
		ACOUT(str.c_str());
		// 關閉連線
		conn.disconnect();
    	}
    	catch (const std::exception &e) {
    	  	ACOUT(e.what());
    	}
    	return num;
}

相關文章