日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

任意编程语言访问PostgreSQL:C++接口

發布時間:2025/1/21 c/c++ 86 豆豆
生活随笔 收集整理的這篇文章主要介紹了 任意编程语言访问PostgreSQL:C++接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天將介紹如何使用C++訪問PostgreSQL。

  官方PostgreSQL客戶端的C++接口API稱為libpqxx,但沒有與PostgreSQL源碼進行綁定,用戶可以從產品分發庫或單獨下載進行安裝。README文件提到用戶可以在Linux、BSD、Solaris、Irix、HP-UX、AIX和安裝Cygwin的Windows上使用libpqxx。安裝libpqxx前要先安裝libpq,因為前者是基于后者的。

  在C++中,namespace被命名為pqxx,用戶必須包含以該名稱命名的頭文件。以下為一個簡單連接與查詢的例子:

#include <iostream>
#include <pqxx/pqxx>

using namespace std;

int main()
{
??? pqxx::connection conn;
??? pqxx::work w(conn);
??? pqxx::result res = w.exec("SELECT 1");
??? w.commit();

??? cout << res[0][0].as<int>() << endl;
}
  如果運行正確,則該程序會打印出“1”,可以使用try/catch關鍵字來處理連接中可能出現的錯誤。如果要像在C語言中那樣使用argv[x],可以像如下方法連接字符串:

pqxx::result res = w.exec("SELECT" + w.quote(argv[1]));
  那么,該如何對數據進行查詢與返回呢?由于保存數據的res變量是一個數組,因此可以利用循環來讀取res中的數據元素:

for (int rownr=0; rownr < res.size(); ++rownr)
{
??? const result::tuple row = res[rownr];
??? for (int colnr=0; colnr < row.size(); ++colnr)
??? {
??????? const result::field = row[colnr];
??????? cout << field.c_str() << \t;
??? }
??? cout << endl;
}
  要記得在寫代碼的時候加上using namespace std;,如果不加的話在編譯時會在使用cout與endl的行顯示警告。

  libpqxx在字符串轉換方面提供大量函數,最有意思的函數為from_string與to_string,第一個函數只有一個字符串參數和一個 T& obj參數,T表示已存在的內置類型,第二個函數只有一個T& obj變量,函數將其轉換為字符串。更多詳細內容可以閱讀相關文檔。

  連接,查詢與事務處理

  本節的其余部分代碼,讀者最好使用using namespace pqxx;,因為可以在寫代碼時免去寫一些數據類型,省去一些不必要的麻煩,如可以不必寫pqxx::...。現在連接一個數據庫,執行一次事務處理,之后進行一次查詢,讀者會看到代碼與前文的C代碼不太一樣。

  可以使用只包含一個參數的結構,如定義了連接選項(數據庫名、用戶名等)的字符串。由于默認用戶名為postgres,因此本例代碼沒有包含用戶名:

connection Conn("dbname=testdb1 hostaddr=192.168.0.101");
  現在已經打開了一個連接,執行沒有出錯。不過到目前為止還不能進行查詢,還需要使用transactor來打開一個事務處理,這樣可以在連接突然斷開時省去一些麻煩與時間。transactor是一個functor,如果在創建連接時需要知道連接的狀態,則該運算符非常有效,而不能僅僅使用簡單的函數或函數指針。

  functor是一個函數對象,可以將其看成一個狀態查詢函數。例如在C++中操作符“()”可以被重載,因此可以將任意數量的數據元素放到括號中。也許有讀者會認為functor是定義操作符()的類,如果想要設計一個函數使兩個給定的作為參數的值相加,則必須要對這些值進行硬編碼。functor考慮到硬編碼的限制,允許用戶使用一個結構體,并將一個新對象“覆蓋”要相加的第一個值,給開發者更多的靈活性。

  下面看如何使用transactor:

  // 假設已經打開一個連接

class Transaction : public transactor<>
{
public:
???? void operator () (transaction<> & t)
???? {
???????? t.exec ("INSERT INTO mytable VALUES(val1,val2)");

???? }

???? void on_abort (const string & msg)
???? {
???????? cout << "Transaction failed with message: " << msg << endl;
???? }
};
  //在 main()函數中

conn.perform (Transaction());
  通過本節內容可以看到,用C++代碼對數據庫進行查詢并不難,用戶可以通過定義事務處理(transactions)并適當規范化查詢結果(參考stringstream),其余部分可以使用循環來實現。
?

轉載于:https://blog.51cto.com/wws5201985/804114

總結

以上是生活随笔為你收集整理的任意编程语言访问PostgreSQL:C++接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久蜜桃av一区二区天堂 | 久操综合 | 国产成人tv | 国产乱淫av片杨贵妃 | 精品视频三区 | 女人张开双腿让男人捅 | 亚洲不卡视频在线观看 | 99精品视频播放 | 理论片午夜 | 小视频国产 | 美女干b视频 | 农村少妇无套内谢粗又长 | 亚洲精品中文字幕成人片 | 四虎新网址 | 国产资源在线免费观看 | 色偷偷五月天 | 国产日韩欧美精品 | 午夜日韩福利 | 一本在线免费视频 | 一区二区三区在线观看视频 | 免费av一区二区 | 美国伊人网 | 日韩一区二区三区精品视频 | 看黄色的网址 | 欧美成人一区在线观看 | 国产成人无码一区二区在线观看 | 91视频久久 | 亚洲免费大片 | 超碰96在线 | 久久亚洲美女 | 超碰人人人 | 九色视频在线播放 | 中文精品久久久久人妻不卡 | 欧洲影院 | 欧美一二 | 狠狠做| 91久久婷婷 | 精品午夜视频 | 日韩精品无码一区二区三区久久久 | 美女网站av | 亚洲国产成| 亚洲一区二区影院 | 亚洲天堂免费在线 | 欧美真人性野外做爰 | 久久爱综合网 | 中文字幕在线观看一区 | 久久久久亚洲AV成人 | 天天舔天天干天天操 | 中文字幕+乱码+中文乱 | 无码内射中文字幕岛国片 | 日本欧美www | 国产精品成人国产乱 | 99成人在线观看 | 一级二级三级黄色片 | 日韩日b | 人人夜 | 奇米第四色在线 | 亚洲少妇第一页 | 中日黄色片 | 亚洲一区偷拍 | 午夜视频在线观看网站 | 国产成人免费视频网站 | 18黄暴禁片在线观看 | 超碰v| 色老头影视 | 亚洲在线视频 | 一级欧美一级日韩 | 女人舌吻男人茎视频 | 日韩国产一区 | 亚洲 欧美 日韩在线 | 国产在线观看一区二区三区 | 美丽姑娘免费观看在线观看 | 国产情侣av自拍 | 亲切的金子餐桌片段的金子 | 成人av中文解说水果派 | 欧美高清一级 | 亚洲精品lv| 日本福利社 | 日韩欧美91 | 久久国产精品网站 | 无码国产精品一区二区色情男同 | 国产一级视频免费观看 | 成人黄色片免费看 | 亚洲欧洲精品一区二区 | 一区在线观看 | 九热精品 | 国产美女作爱视频 | 一区二区三区免费在线观看视频 | 天堂av√| 可以直接看的毛片 | 巨乳中文字幕 | 人人澡超碰碰 | 中文字幕第页 | 国产黄色网址在线观看 | 公侵犯一区二区三区 | 日本xxxxwww| 天天天操操操 | 91超碰在线观看 | 性欧美丰满熟妇xxxx性久久久 |