任意语言访问PostgreSQL:C语言接口(2)

  如果不出错误,会在屏幕上看到提示“Connection succeeded.”,表示连接数据库成功,不过上文并没有什么实际用处。那么何为实际用处呢----对数据进行查询,但这里先介绍如何断开连接, 即调用PQfinish,该函数只有一个参数PGconn *conn,并返回void。

  PQexec函数执行查询,参数为PGconn *conn与const char *command,返回一个PGresult类型的对象。在如下示例中,声明一个PGresult变量,并向服务器发送一个命令。读者可自行编写检查连接与否以及错误处理的代码。

  PGresult *res;

  res
= PQexec(conn, "SELECT * FROM mydatabase");

  PQclear(res);

  显然这段代码无法编译,只是为了向读者展示libpq库提供的功能,而不是直接提供可用代码。不过在这段代码中,res包含了查询结果,读者可以任意对其进行解析。PQresultStatus可以查询命令的状态,该函数返回PGRES_COMMAND_OK或 PGRES_FATAL_ERROR.。可在PostgreSQL项目页面找到exec函数的一个综合列表。

  下面介绍一些有用的函数,例如,PQntuples函数将给定的res作为参数,以整数类型返回表中列的数量。如果查询的状态为PGRES_TUPLES_OK,则它以PGresult对象为参数,并返回一个整型值。PQnfields函数给出每行的列数。PQfname函数返回与某数字关联的列的名字,PQfnumber函数功能则完全相反。要得到某一单元的值,需要将PGresult以及单元的列号和行号传给PQgetvalue函数。

  可以看到这些函数都比较简单,但PQexec不能同时处理多个SQL命令,因为该函数只能返回一个结构,如果有多个命令,则只能返回最后一个命令的结果。另一个不足是,PQexec在执行一个命令时会一直等到命令返回,因此读者在使用该命令遇到阻塞执行时要分外小心。如果这些不足影响到读者用户的使用,可以使用其它函���代替,如PQsendQuery和PQgetResult等,可使用这些函数来进行异步查询处理。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wywgsw.html