例子如下:
#include <stdio.h>#include <stdlib.h>#include <libpq-fe.h>int main(int argc, char * argv[]){PGconn *conn;PGresult * res;ConnStatusType pgstatus;char connstr[1024];char szSQL[2048];int nParams = 0;int paramLengths[5];int paramFormats[5];Oid paramTypes[5];char * paramValues[5];int i, cnt;char cid[32];int k;sprintf(connstr,"hostaddr=%s dbname=%s port=%d user=%s password=%s","127.0.0.1", "gogudb", 5432, "osdba", "rootR00t");conn = PQconnectdb(connstr);pgstatus = PQstatus(conn);if (pgstatus == CONNECTION_OK){printf("Connect database success!\n");}else{printf("Connect database fail:%s\n",PQerrorMessage(conn));return -1;}sprintf(szSQL, "SELECT pad FROM sbtest1 WHERE id = $1");paramTypes[0] = 23;res = PQprepare(conn,"tangS1",szSQL,1,paramTypes);if( PQresultStatus(res) != PGRES_COMMAND_OK ){printf("Failed to prepare SQL : %s\n: %s\n",szSQL, PQerrorMessage(conn));PQfinish(conn);return -1;}PQclear(res);paramValues[0] = cid;for (k=0; k<10; k++){//sprintf(cid, "%d", 50260+k);sprintf(cid, "%d", 40000+k);paramLengths[0] = 6;paramFormats[0] = 0;res = PQexecPrepared(conn,"tangS1",1,paramValues,paramLengths,paramFormats,0);if( (PQresultStatus(res) != PGRES_COMMAND_OK ) && (PQresultStatus(res) != PGRES_TUPLES_OK)){printf("%s\n",PQerrorMessage(conn));PQclear(res);PQfinish(conn);return -1;}cnt = PQntuples(res);printf("return %d rows\n", cnt);for (i=0; i<cnt; i++){printf("row %d: %s\n", i, PQgetvalue(res, i, 0));}PQclear(res);}/* 关闭数据库连接并清理 */PQfinish(conn);return 0;}
方法总结如下:
- 使用PQconnectdb连接数据库,然后用PQstatus检查连接是否成功
- 使用PQprepare预执行SQL,注意在PostgreSQL中的绑定变量的占位符是$1、$2、$3… $N。
- 使用PQexecPrepared把绑定变量的值传给数据库,真正执行SQL
- 使用PQgetvalue获得执行结果。
本站文章,未经作者同意,请勿转载,如需转载,请邮件customer@csudata.com.
0 评论
添加一条新评论