libpq 에서 prepared statement 호출:
10327 단어 statement
[root@lex tst]# cat testlibpq.c
/*
* testlibpq.c
* Test the C version of LIBPQ, the POSTGRES frontend library.
*/
#include <stdio.h>
#include <stdlib.h>
#include "libpq-fe.h"
static void
exit_nicely(PGconn *conn)
{
PQfinish(conn);
exit(EXIT_SUCCESS);
}
int
main()
{
int nFields;
int i,
j;
#ifdef DEBUG
FILE *debug;
#endif /* DEBUG */
PGconn *conn;
PGresult *res;
const char *conninfo="postgresql://postgres:postgres@localhost:5432/postgres";
/* make a connection to the database */
conn = PQconnectdb(conninfo);
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database failed.
");
fprintf(stderr, "%s", PQerrorMessage(conn));
exit_nicely(conn);
}
#ifdef DEBUG
debug = fopen("/tmp/trace.out", "w");
PQtrace(conn, debug);
#endif /* DEBUG */
/* start a transaction block */
res = PQexec(conn, "BEGIN");
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "BEGIN command failed
");
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
////////////////////////////////////////////////////////////////////////////////////
const char *stmt_name = "test_stmt";
const char *stmt = "select * from customers where cust_id=$1";
Oid param_types[1];
param_types[0] = 0; ///let db to judge it.
res = PQprepare(conn, stmt_name, stmt,1,param_types);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
{
fprintf(stderr, "PQprepare failed
");
PQclear(res);
exit_nicely(conn);
}
PQclear(res);
const char* custid = "3";
const char* param_values[1];
param_values[0] =custid;
int param_lengths[1];
param_lengths[0] = 1;
int param_formats[1];
param_formats[0] = 0;
res = PQexecPrepared(conn, stmt_name, 1, param_values, param_lengths,
param_formats, 0);
if (PQresultStatus(res) != PGRES_TUPLES_OK)
{
fprintf(stderr, "PQexecPrepared statement didn't return tuples properly
");
PQclear(res);
exit_nicely(conn);
}
///////////////////////////////////////////////////////////////////////////////////
/* first, print out the attribute names */
nFields = PQnfields(res);
for (i = 0; i < nFields; i++)
printf("%-15s", PQfname(res, i));
printf("
");
/* next, print out the instances */
for (i = 0; i < PQntuples(res); i++)
{
for (j = 0; j < nFields; j++)
printf("%-15s", PQgetvalue(res, i, j));
printf("
");
}
PQclear(res);
/* end the transaction */
res = PQexec(conn, "END");
PQclear(res);
/* close the connection to the database and cleanup */
PQfinish(conn);
#ifdef DEBUG
fclose(debug);
#endif /* DEBUG */
return 0;
}
[root@lex tst]#
컴 파일 및 실행:
[root@lex tst]# gcc -c -I/usr/local/pgsql/include testlibpq.c
[root@lex tst]# gcc -o testlibpq testlibpq.o -L/usr/local/pgsql/lib -lpq
[root@lex tst]# ./testlibpq
cust_id cust_name
3 Taylor
[root@lex tst]#
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
테이블 만들기 | SQL버전: SQL Server 2019 여기서, 나는 MSSQL 서버 데이터베이스에 간단한 표를 만드는 방법을 신속하게 개술할 것이다. 창설표는 매우 간단하기 때문에 우리는 문장만 사용할 수 있다.그리고 우리가 원하는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.