歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 任意編程語言訪問PostgreSQL:C++接口

任意編程語言訪問PostgreSQL:C++接口

日期:2017/3/1 10:26:58   编辑:Linux編程
在之前的文章《任意語言訪問PostgreSQL:C語言接口》http://www.linuxidc.com/Linux/2012-03/56396.htm 中,介紹了如何使用C語言訪問PostgreSQL,今天將介紹如何使用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變量,函數將其轉換為字符串。更多詳細內容可以閱讀相關文檔。

Copyright © Linux教程網 All Rights Reserved