例子如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <libpq-fe.h>
  4. int main(int argc, char * argv[])
  5. {
  6. PGconn *conn;
  7. PGresult * res;
  8. ConnStatusType pgstatus;
  9. char connstr[1024];
  10. char szSQL[2048];
  11. int nParams = 0;
  12. int paramLengths[5];
  13. int paramFormats[5];
  14. Oid paramTypes[5];
  15. char * paramValues[5];
  16. int i, cnt;
  17. char cid[32];
  18. int k;
  19. sprintf(connstr,
  20. "hostaddr=%s dbname=%s port=%d user=%s password=%s",
  21. "127.0.0.1", "gogudb", 5432, "osdba", "rootR00t");
  22. conn = PQconnectdb(connstr);
  23. pgstatus = PQstatus(conn);
  24. if (pgstatus == CONNECTION_OK)
  25. {
  26. printf("Connect database success!\n");
  27. }
  28. else
  29. {
  30. printf("Connect database fail:%s\n",PQerrorMessage(conn));
  31. return -1;
  32. }
  33. sprintf(szSQL, "SELECT pad FROM sbtest1 WHERE id = $1");
  34. paramTypes[0] = 23;
  35. res = PQprepare(conn,
  36. "tangS1",
  37. szSQL,
  38. 1,
  39. paramTypes);
  40. if( PQresultStatus(res) != PGRES_COMMAND_OK )
  41. {
  42. printf("Failed to prepare SQL : %s\n: %s\n",szSQL, PQerrorMessage(conn));
  43. PQfinish(conn);
  44. return -1;
  45. }
  46. PQclear(res);
  47. paramValues[0] = cid;
  48. for (k=0; k<10; k++)
  49. {
  50. //sprintf(cid, "%d", 50260+k);
  51. sprintf(cid, "%d", 40000+k);
  52. paramLengths[0] = 6;
  53. paramFormats[0] = 0;
  54. res = PQexecPrepared(conn,
  55. "tangS1",
  56. 1,
  57. paramValues,
  58. paramLengths,
  59. paramFormats,
  60. 0);
  61. if( (PQresultStatus(res) != PGRES_COMMAND_OK ) && (PQresultStatus(res) != PGRES_TUPLES_OK))
  62. {
  63. printf("%s\n",PQerrorMessage(conn));
  64. PQclear(res);
  65. PQfinish(conn);
  66. return -1;
  67. }
  68. cnt = PQntuples(res);
  69. printf("return %d rows\n", cnt);
  70. for (i=0; i<cnt; i++)
  71. {
  72. printf("row %d: %s\n", i, PQgetvalue(res, i, 0));
  73. }
  74. PQclear(res);
  75. }
  76. /* 关闭数据库连接并清理 */
  77. PQfinish(conn);
  78. return 0;
  79. }

方法总结如下:

  • 使用PQconnectdb连接数据库,然后用PQstatus检查连接是否成功
  • 使用PQprepare预执行SQL,注意在PostgreSQL中的绑定变量的占位符是$1、$2、$3… $N。
  • 使用PQexecPrepared把绑定变量的值传给数据库,真正执行SQL
  • 使用PQgetvalue获得执行结果。
0 评论  
添加一条新评论