Help Center/
GaussDB/
Developer Guide(Centralized_V2.0-3.x)/
Application Development Guide/
Development Based on libpq/
Typical Application Development Examples/
Executing Prepared Statements
Updated on 2025-03-13 GMT+08:00
Executing Prepared Statements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
/* * testlibpq2.c Test PQprepare * PQprepare creates a prepared statement with specified parameters for PQexecPrepared to execute the prepared statement. */ #include <stdio.h> #include <stdlib.h> #include <libpq-fe.h> #include <string.h> int main(int argc, char * argv[]) { /* The values of variables such as user and passwd must be read from environment variables or configuration files. Environment variables need to be configured as required. If no environment variable is used, a character string can be directly assigned. */ PGconn *conn; PGresult * res; ConnStatusType pgstatus; char connstr[1024]; char cmd_sql[2048]; int nParams = 0; int paramLengths[5]; int paramFormats[5]; Oid paramTypes[5]; char * paramValues[5]; int i, cnt; char cid[32]; int k; char *passwd = getenv("EXAMPLE_PASSWD_ENV"); char *port = getenv("EXAMPLE_PORT_ENV"); char *hostaddr = getenv("EXAMPLE_HOST_ENV"); char *username = getenv("EXAMPLE_USERNAME_ENV"); char *dbname = getenv("EXAMPLE_DBNAME_ENV"); /* Use PQconnectdb to connect to the database. connstr indicates the detailed connection information.*/ sprintf(connstr, "hostaddr=%s dbname=%s port=%s user=%s password=%s", hostaddr, dbname, port, username, passwd); 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; } /* Create table t01. */ res = PQexec(conn, "DROP TABLE IF EXISTS t01;CREATE TABLE t01(a int, b int);INSERT INTO t01 values(1, 23);"); if (PQresultStatus(res) != PGRES_COMMAND_OK) { printf("Command failed: %s.\n", PQerrorMessage(conn)); PQfinish(conn); return -1; } /* cmd_sql query */ sprintf(cmd_sql, "SELECT b FROM t01 WHERE a = $1"); /*Parameter corresponding to $1 in cmd_sql*/ paramTypes[0] = 23; /* PQprepare creates a prepared statement with given parameters. */ res = PQprepare(conn, "pre_name", cmd_sql, 1, paramTypes); if( PQresultStatus(res) != PGRES_COMMAND_OK ) { printf("Failed to prepare SQL : %s\n: %s\n",cmd_sql, PQerrorMessage(conn)); PQfinish(conn); return -1; } PQclear(res); paramValues[0] = cid; for (k=0; k<2; k++) { sprintf(cid, "%d", 1); paramLengths[0] = 6; paramFormats[0] = 0; /*Execute the prepared statement.*/ res = PQexecPrepared(conn, "pre_name", 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); } /* The execution is complete. Close the connection. */ PQfinish(conn); return 0; } |
The command output is as follows:
Connect database success! NOTICE: table "t01" does not exist, skipping return 1 rows row 0: 23 return 1 rows row 0: 23
Parent topic: Typical Application Development Examples
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
The system is busy. Please try again later.
For any further questions, feel free to contact us through the chatbot.
Chatbot