VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

异步命令处理

PQexec函数对普通的同步应用里提交命令已经足够使用。但是它却有几个缺陷,而这些缺陷可能对某些用户很重要:

  • PQexec等待命令结束,而应用可能还有其它的工作要做(比如维护用户界面等),此时PQexec可不想阻塞在这里等待响应。

  • 因为客户端应用在等待结果的时候是处于挂起状态的,所以应用很难判断它是否该尝试结束正在进行的命令。

  • PQexec只能返回一个PGresult结构。如果提交的命令字符串包含多个SQL命令,除了最后一个PGresult以外都会被PQexec丢弃。

  • PQexec总是收集命令的整个结果,将其缓存在一个PGresult中。虽然这为应用简化了错误处理逻辑,但是对于包含多行的结果是不切实际的。

不想受到这些限制的应用可以改用下面的函数,这些函数也是构造PQexec的函数:PQsendQuery和PQgetResult。PQsendQueryParams,PQsendPrepare,PQsendQueryPrepared也可以和PQgetResult一起使用。

PQsendQuery

功能描述

向服务器提交一个命令而不等待结果。如果查询成功发送则返回1,否则返回0。

原型

int PQsendQuery(PGconn *conn, const char *command);

参数

表7-42 PQsendQuery参数

关键字 参数说明
conn 指向包含链接的对象指针。
command 需要执行的查询字符串.

返回值

int:执行结果为1表示成功,0表示失败,失败原因存到conn->errorMessage中。

注意事项

在成功调用PQsendQuery后,调用PQgetResult一次或者多次获取结果。PQgetResult返回空指针表示命令已执行完成,否则不能再次调用PQsendQuery(在同一连接上)。

示例

请参见7.3.5示例章节。

PQsendQueryParams

功能描述

给服务器提交一个命令和分隔的参数,而不等待结果。

原型

int PQsendQueryParams(PGconn *conn, 
                      const char *command, 
                      int nParams, 
                      const Oid *paramTypes, 
                      const char * const *paramValues, 
                      const int *paramLengths, 
                      const int *paramFormats, 
                      int resultFormat);

参数

表7-43 PQsendQueryParams参数

关键字 参数说明
conn 指向包含链接的对象指针。
command 需要执行的查询字符串。
nParams 参数个数。
paramTypes 参数类型。
paramValues 参数值。
paramLengths 参数长度。
paramFormats 参数格式。
resultFormat 结果的格式。

返回值

int:执行结果为1表示成功,0表示失败,失败原因存到conn->errorMessage中。

注意事项

该函数等效于PQsendQuery,只是查询参数可以和查询字符串分开声明。函数的参数处理和PQexecParams一样,和PQexecParams类似,它不能在2.0版本的协议连接上工作,并且它只允许在查询字符串里出现一条命令。

示例

请参见7.3.5示例章节。

PQsendPrepare

功能描述

发送一个请求,创建一个给定参数的预备语句,而不等待结束。

原型

int PQsendPrepare(PGconn *conn, 
                  const char *stmtName, 
                  const char *query, 
                  int nParams, 
                  const Oid *paramTypes);

参数

表7-44 PQsendPrepare参数

关键字 参数说明
conn 指向包含链接的对象指针。
stmtName 需要执行的stmt名称。
query 需要执行的查询字符串。
nParams 参数个数。
paramTypes 声明参数类型的数组。

返回值

int:执行结果为1表示成功,0表示失败,失败原因存到conn->errorMessage中。

注意事项

该函数为PQprepare的异步版本:如果能够分派请求,则返回1,否则返回0。调用成功后,调用PQgetResult判断服务端是否成功创建了preparedStatement。函数的参数与PQprepare一样处理。与PQprepare一样,它也不能在2.0协议的连接上工作。

示例

请参见7.3.5示例章节。

PQsendQueryPrepared

功能描述

发送一个请求执行带有给出参数的预备语句,不等待结果。

原型

int PQsendQueryPrepared(PGconn *conn, 
                        const char *stmtName, 
                        int nParams, 
                        const char * const *paramValues, 
                        const int *paramLengths, 
                        const int *paramFormats, 
                        int resultFormat);

参数

表7-45 PQsendQueryPrepared参数

关键字 参数说明
conn 指向包含链接信息的对象指针。
stmtName 需要执行的stmt名称。
nParams 参数个数。
paramValues 参数值。
paramLengths 参数长度。
paramFormats 参数格式。
resultFormat 结果的格式。

返回值

int:执行结果为1表示成功,0表示失败,失败原因存到conn->error_message中。

注意事项

该函数类似于PQsendQueryParams,但是要执行的命令是通过命名一个预先准备的语句来指定的,而不是提供一个查询字符串。该函数的参数与PQexecPrepared一样处理。和PQexecPrepared一样,它也不能在2.0协议的连接上工作。

示例

请参见7.3.5示例章节。

PQflush

功能描述

尝试将任何排队的输出数据刷新到服务器。

原型

int PQflush(PGconn *conn);

参数

表7-46 PQflush参数

关键字 参数说明
conn 指向包含链接信息的对象指针

返回值

int:如果成功(或者如果发送队列为空),则返回0;如果由于某种原因失败,则返回-1;如果发送队列中的所有数据都发送失败,则返回1。(此情况只有在连接为非阻塞时才能发生),失败原因存到conn->error_message中。

注意事项

在非阻塞连接上发送任何命令或数据之后,调用PQflush。如果返回1,则等待套接字变为读或写就绪。如果为写就绪状态,则再次调用PQflush。如果已经读到,调用PQconsumeInput,然后再次调用PQflush。重复,直到PQflush返回0。(必须检查读就绪,并用PQconsumeInput排出输入,因为服务器可以阻止试图向我们发送数据,例如。通知信息,直到我们读完它才会读我们的数据。)一旦PQflush返回0,就等待套接字准备好,然后按照上面描述读取响应。

示例

请参见7.3.5示例章节。