首頁>技術>

一、簡介Libpq 是應用程式設計師使用 HGDB 的 C 介面。libpq 是一個庫函式的集合,它們允許客戶端程式傳遞查詢給 HGDB 後端伺服器並且接收這些查詢的結果。libpq庫是PostgreSQL的C介面。它是一組庫函式,允許客戶端程式與PostgreSQL互動。它也是其他PostgreSQL應用程式介面的基礎引擎,包括為C++、Perl、PHP、Ruby、Python和Tcl編寫的應用程式介面。Libpq可能大家以前沒有接觸甚至沒有聽說,那麼其實他和jdbc是一個東西,JDBC(Java DataBase Connectivity,java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。要在特定資料庫中使用JDBC,我們需要該資料庫的JDBC驅動程式。注意:使用 libpq 的客戶端程式必須包括標頭檔案 libpq-fe.h 並必須與 libpq 庫連結在一起。二、用途簡單地說,Libpq 可做三件事:與資料庫建立連線、傳送 操作資料庫的語句並處理結果。下列程式碼段給出了以上三步的基本示例:

#include <stdio.h>  #include <stdlib.h>  #include <libpq-fe.h>  void do_exit(PGconn *conn) {      PQfinish(conn);      exit(1);  }  int main() {  //連線資料庫,給出字串    PGconn *conn = PQconnectdb("user=highgo dbname=highgo password=highgo123");  //返回連結資訊    if (PQstatus(conn) == CONNECTION_BAD) {          fprintf(stderr, "Connection to database failed: %s\n",              PQerrorMessage(conn));          do_exit(conn);  }  else{	printf(‘連線成功’);}//獲取資料表結果    PGresult *res = PQexec(conn, "SELECT * FROM Cars LIMIT 5");      if (PQresultStatus(res) != PGRES_TUPLES_OK) {      printf("No data retrieved\n");              PQclear(res);      do_exit(conn);      }      //將查詢結果輸出    int rows = PQntuples(res);      for(int i=0; i<rows; i++) {          printf("%s %s %s\n", PQgetvalue(res, i, 0),               PQgetvalue(res, i, 1), PQgetvalue(res, i, 2));      }          PQclear(res);      PQfinish(conn);      return 0;  }  12345678910111213141516171819202122232425262728293031323334353637383940414243444546

三、增刪改查示例這是我們對資料庫進行的最基本的也是最多的操作,下面給到每一個例子以及用到的函式分析。

#include <stdio.h>#include <libpq-fe.h>int main(void){//連線資料庫		const char* conninfo="host=localhost user=highgo  dbname=highgo  password=ls123456";			PGconn* conn=PQconnectdb(conninfo);   			if(PQstatus(conn)==CONNECTION_BAD)					{						printf("failed to connect database!");							PQfinish(conn);							return 1;}//建立表,插入數PGresult *res=PQexec(conn,"create table student (id int,name text)");if(PQresultStatus(res)!=PGRES_COMMAND_OK){printf("create failed!%s \n",PQresultErrorMessage(res));}PQclear(res);res=PQexec(conn,"insert into student values(1,'hanjingyi')");if(PQresultStatus(res)!=PGRES_COMMAND_OK){printf("insert failed!\n");}PQclear(res);res=PQexec(conn,"insert into student values(2,'liushun')");if(PQresultStatus(res)!=PGRES_COMMAND_OK){printf("insert failed\n!");}PQclear(res);//查詢操作res=PQexec(conn,"SELECT * FROM student");	if(PQresultStatus(res)!=PGRES_TUPLES_OK)	{		printf("SELECT failed!");		PQresultErrorMessage(res);		PQclear(res);		return 1;	}	int i=PQntuples(res);	int t=PQnfields(res);           int s=0;//迴圈取值	for(;s<i;s++)	{                int k=0;		for(;k<t;k++)		{			printf(“%s %s \n”,PQgetvalue(res,s,k));					}	}	PQclear(res);//刪除操作res=PQexec(conn,"DELETE FROM student WHERE id=3");	if(PQresultStatus(res)!=PGRES_COMMAND_OK)	{		printf("DELETE executed failed!%s,\n",PQresultErrorMessage(res));		PQresultErrorMessage(res);		PQclear(res);		return 1;	}	else	{	        printf("DELETE operation executed succeed!\n");		PQclear(res);	} 	return 0;}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

四、一些常用函式Pqconnectdb 建立一個數據庫連線PGresult 封裝查詢的結果PQexec()提交了一個sql命令到伺服器然後等待結果。PQresultStatus 返回該命令的結果狀態。PGRES_COMMAND_OK一個不返回資料的命令成功完成。 PGRES_TUPLES_OK 一個返回資料的命令(例如 SELECT 或者 SHOW)成功完成。PQntuples 返回查詢結果中的行(元組)數。PQnfields 返回查詢結果中每一行的列(域)數。PQgetvalue 返回一個 PGresult 的一行的單一域值。PQclear 釋放與一個 PGresult 相關的儲存。每一個命令結果不再需要時應該用 PQclear 釋放。

6
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Kotlin - 面向物件之抽象類與介面