例子如下:
#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 评论
添加一条新评论