华为云用户手册

  • 异步命令处理 PQexec函数对普通的同步应用里提交命令已经足够使用。但是它却有几个缺陷,而这些缺陷可能对某些用户很重要: PQexec等待命令结束,而应用可能还有其它的工作要做(比如维护用户界面等),此时PQexec可不想阻塞在这里等待响应。 因为客户端应用在等待结果的时候是处于挂起状态的,所以应用很难判断它是否该尝试结束正在进行的命令。 PQexec只能返回一个PGresult结构。如果提交的命令字符串包含多个SQL命令,除了最后一个PGresult以外都会被PQexec丢弃。 PQexec总是收集命令的整个结果,将其缓存在一个PGresult中。虽然这为应用简化了错误处理逻辑,但是对于包含多行的结果是不切实际的。 不想受到这些限制的应用可以改用下面的函数,这些函数也是构造PQexec的函数:PQsendQuery和PQgetResult。PQsendQueryParams,PQsendPrepare,PQsendQueryPrepared也可以和PQgetResult一起使用。 PQsendQuery PQsendQueryParams PQsendPrepare PQsendQueryPrepared PQflush 父主题: libpq
  • 返回值 PQresultStatus:命令执行结果的枚举,包括: 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 PQresultStatus可以返回下面数值之一: PGRES_EMPTY_QUERY 发送给服务器的字串是空的。 PGRES_COMMAND_OK 成功完成一个不返回数据的命令。 PGRES_TUPLES_OK 成功执行一个返回数据的查询(比如SELECT或者SHOW)。 PGRES_COPY_OUT (从服务器)Copy Out (拷贝出)数据传输开始。 PGRES_COPY_IN Copy In(拷贝入)(到服务器)数据传输开始。 PGRES_BAD_RESPONSE 服务器的响应无法理解。 PGRES_NONFATAL_ERROR 发生了一个非致命错误(通知或者警告)。 PGRES_FATAL_ERROR 发生了一个致命错误。 PGRES_COPY_BOTH 拷贝入/出(到和从服务器)数据传输开始。这个特性当前只用于流复制, 所以这个状态不会在普通应用中发生。 PGRES_SINGLE_TUPLE PGresult包含一个来自当前命令的结果元组。 这个状态只在查询选择了单行模式时发生
  • 注意事项 PQprepare创建一个为PQexecPrepared执行用的预备语句,本特性支持命令的重复执行,不需要每次都进行解析和规划。PQprepare仅在协议3.0及以后的连接中支持,使用协议2.0时,PQprepare将失败。 该函数从查询字符串创建一个名为stmtName的预备语句,该查询字符串必须包含一个SQL命令。stmtName可以是""来创建一个未命名的语句,在这种情况下,任何预先存在的未命名的语句都将被自动替换;否则,如果在当前会话中已经定义了语句名称,则这是一个错误。如果使用了任何参数,那么在查询中将它们称为$1,$2等。nParams是在paramTypes[]数组中预先指定类型的参数的数量。(当nParams为0时,数组指针可以为NULL) paramTypes[]通过OID指定要分配给参数符号的数据类型。如果paramTypes为NULL ,或者数组中的任何特定元素为零,服务器将按照对非类型化字面字符串的相同方式为参数符号分配数据类型。另外,查询可以使用数字高于nParams的参数符号;还将推断这些符号的数据类型。 通过执行SQLPREPARE语句,还可以创建与PQexecPrepared一起使用的预备语句。此外,虽然没有用于删除预备语句的libpq函数,但是SQL DEALLOCATE语句可用于此目的。
  • 参数 表1 PQexecPreparedBatch参数 关键字 参数说明 conn 连接句柄。 stmtName stmt名称,可以用""或者NULL来引用未命名语句,否则它必须是一个现有预备语句的名字。 nParams 参数个数。 nBatchCount 批量数。 paramValues 参数的实际值。 paramLengths 参数的实际数据长度。 paramFormats 参数的格式(文本或二进制)。 resultFormat 结果的格式(文本或二进制)。
  • 原型 PGresult* PQexecPreparedBatch(PGconn* conn, const char* stmtName, int nParams, int nBatchCount, const char* const* paramValues, const int* paramLengths, const int* paramFormats, int resultFormat);
  • 原型 PGresult* PQexecPrepared(PGconn* conn, const char* stmtName, int nParams, const char* const* paramValues, const int* paramLengths, const int* paramFormats, int resultFormat);
  • 参数 表1 PQexecPrepared参数 关键字 参数说明 conn 连接句柄。 stmtName stmt名称,可以用""或者NULL来引用未命名语句,否则它必须是一个现有预备语句的名字。 nParams 参数个数。 paramValues 参数的实际值。 paramLengths 参数的实际数据长度。 paramFormats 参数的格式(文本或二进制)。 resultFormat 结果的格式(文本或二进制)。
  • 参数 表1 PQexecParamsBatch参数 关键字 参数说明 conn 连接句柄。 command SQL文本串。 nParams 绑定参数的个数 nBatch 批量操作数。 paramTypes 绑定参数类型。 paramValues 绑定参数的值。 paramLengths 参数长度。 paramFormats 参数格式(文本或二进制)。 resultFormat 返回结果格式(文本或二进制)。
  • 原型 PGresult* PQexecParamsBatch(PGconn* conn, const char* command, int nParams, int nBatch, const Oid* paramTypes, const char* const* paramValues, const int* paramLengths, const int* paramFormats, int resultFormat);
  • 原型 PGresult* PQexecParams(PGconn* conn, const char* command, int nParams, const Oid* paramTypes, const char* const* paramValues, const int* paramLengths, const int* paramFormats, int resultFormat);
  • 数据库执行语句函数 与数据库服务器的连接成功建立,便可以使用这里描述的函数执行SQL查询和命令。 PQclear PQexec PQexecParams PQexecParamsBatch PQexecPrepared PQexecPreparedBatch PQfname PQgetvalue PQnfields PQntuples PQprepare PQresultStatus 父主题: libpq
  • 注意事项 状态可以是多个值之一。但是,在异步连接过程之外只能看到其中两个:CONNECTION_OK和CONNECTION_BAD。与数据库的良好连接状态为CONNECTION_OK。状态表示连接尝试失败CONNECTION_BAD。通常,“正常”状态将一直保持到PQfinish,但通信失败可能会导致状态CONNECTION_BAD过早变为。在这种情况下,应用程序可以尝试通过调用进行恢复PQreset。
  • 返回值 ConnStatusType:链接状态的枚举,包括: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CONNECTION_STARTED 等待进行连接。 CONNECTION_MADE 连接成功;等待发送。 CONNECTION_AWAITING_RESPONSE 等待来自服务器的响应。 CONNECTION_AUTH_OK 已收到认证;等待后端启动结束。 CONNECTION_SSL_STARTUP 协商SSL加密。 CONNECTION_SETENV 协商环境驱动的参数设置。 CONNECTION_OK 链接正常。 CONNECTION_BAD 链接故障。
  • 原型 PGconn *PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions, const char *pgtty, const char *dbName, const char *login, const char *pwd);
  • 参数 表1 PQsetdbLogin参数 关键字 参数说明 pghost 要链接的主机名,详见链接参数章节描述的host字段。 pgport 主机服务器的端口号,详见链接参数描述的port字段。 pgoptions 添加命令行选项以在运行时发送到服务器,详见链接参数描述的options字段。 pgtty 忽略(以前,这个选项声明服务器日志的输出方向)。 dbName 要链接的数据库名,详见链接参数描述的dbname字段。 login 要链接的用户名,详见链接参数章节描述的user字段。 pwd 如果服务器要求口令认证,所用的口令,详见链接参数描述的password字段。
  • 数据库连接控制函数 数据库连接控制函数控制与数据库服务器链接的事情。一个应用程序一次可以与多个服务器建立链接,如一个客户端链接多个数据库的场景。每个链接都是用一个从函数PQconnectdb、PQconnectdbParams或PQsetdbLogin获得的PGconn对象表示。注意,这些函数总是返回一个非空的对象指针,除非内存分配失败,会返回一个空的指针。链接建立的接口保存在PGconn对象中,可以调用PQstatus函数来检查一下返回值看看连接是否成功。 PQconnectdbParams PQconnectdb PQconninfoParse PQconnectStart PQerrorMessage PQsetdbLogin PQfinish PQreset PQstatus 父主题: libpq
  • 参数 表1 SQLSetStmtAttr参数 关键字 参数说明 StatementHandle 语句句柄。 Attribute 需设置的属性。 ValuePtr 指向对应Attribute的值。依赖于Attribute的值,ValuePtr可能是32位无符号整型值,或指向以空结束的字符串,二进制缓冲区,或者驱动定义值。注意,如果ValuePtr参数是驱动程序指定值。ValuePtr可能是有符号的整数。 StringLength 如果ValuePtr指向字符串或二进制缓冲区,这个参数是*ValuePtr长度,如果ValuePtr指向整型,忽略StringLength。
  • 原型 1 2 3 4 SQLRETURN SQLSetStmtAttr(SQLHSTMT StatementHandle SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength);
  • 参数 表1 SQLSetEnvAttr参数 关键字 参数说明 EnvironmentHandle 环境句柄。 Attribute 需设置的环境属性,可为如下值: SQL_ATTR_ODBC_VERSION:指定ODBC版本。 SQL_CONNECTION_POOLING:连接池属性。 SQL_OUTPUT_NTS:指明驱动器返回字符串的形式。 ValuePtr 指向对应Attribute的值。依赖于Attribute的值,ValuePtr可能是32位整型值,或为以空结束的字符串。 StringLength 如果ValuePtr指向字符串或二进制缓冲区,这个参数是*ValuePtr长度,如果ValuePtr指向整型,忽略StringLength。
  • 原型 1 2 3 4 SQLRETURN SQLSetEnvAttr(SQLHENV EnvironmentHandle SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength);
  • 原型 1 2 3 4 SQLRETURN SQLSetConnectAttr(SQLHDBC ConnectionHandle SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength);
  • 参数 表1 SQLSetConnectAttr参数 关键字 参数说明 ConnectionHandle 连接句柄。 Attribute 设置属性。 ValuePtr 指向对应Attribute的值。依赖于Attribute的值,ValuePtr是32位无符号整型值或指向以空结束的字符串。注意,如果ValuePtr参数是驱动程序指定值。ValuePtr可能是有符号的整数。 StringLength 如果ValuePtr指向字符串或二进制缓冲区,这个参数是*ValuePtr长度,如果ValuePtr指向整型,忽略StringLength。
  • 注意事项 SQLGetDiagRec不发布自己的诊断记录。它用下列返回值来报告它自己的执行结果: SQL_SUC CES S:函数成功返回诊断信息。 SQL_SUCCESS_WITH_INFO:MessageText太小以致不能容纳所请求的诊断信息。没有诊断记录生成。 SQL_INVALID_HANDLE:由HandType和Handle所指出的句柄是不合法句柄。 SQL_ERROR:RecNumber小于等于0或BufferLength小于0。 如果调用ODBC函数返回SQL_ERROR或SQL_SUCCESS_WITH_INFO,可调用SQLGetDiagRec返回诊断信息值SQLSTATE,SQLSTATE值的如下表。 表2 SQLSTATE值 SQLSATATE 错误 描述 HY000 一般错误 未定义特定的SQLSTATE所产生的一个错误。 HY001 内存分配错误 驱动程序不能分配所需要的内存来支持函数的执行或完成。 HY008 取消操作 调用SQLCancel取消执行语句后,依然在StatementHandle上调用函数。 HY010 函数系列错误 在为执行中的所有数据参数或列发送数据前就调用了执行函数。 HY013 内存管理错误 不能处理函数调用,可能由当前内存条件差引起。 HYT01 连接超时 数据源响应请求之前,连接超时。 IM001 驱动程序不支持此函数 调用了StatementHandle相关的驱动程序不支持的函数
  • 原型 1 2 3 4 5 6 7 8 SQLRETURN SQLGetDiagRec(SQLSMALLINT HandleType SQLHANDLE Handle, SQLSMALLINT RecNumber, SQLCHAR *SQLState, SQLINTEGER *NativeErrorPtr, SQLCHAR *MessageText, SQLSMALLINT BufferLength SQLSMALLINT *TextLengthPtr);
  • 参数 表1 SQLGetDiagRec参数 关键字 参数说明 HandleType 句柄类型标识符,它说明诊断所要求的句柄类型。必须为下列值之一: SQL_HANDLE_ENV SQL_HANDLE_DBC SQL_HANDLE_STMT SQL_HANDLE_DESC Handle 诊断数据结构的句柄,其类型由HandleType来指出。如果HandleType是SQL_HANDLE_ENV,Handle可以是共享的或非共享的环境句柄。 RecNumber 指出应用从查找信息的状态记录。状态记录从1开始编号。 SQLState 输出参数:指向缓冲区的指针,该缓冲区存储着有关RecNumber的五字符的SQLSTATE码。 NativeErrorPtr 输出参数:指向缓冲区的指针,该缓冲区存储着本地的错误码。 MessageText 指向缓冲区的指针,该缓冲区存储着诊断信息文本串。 BufferLength MessageText的长度。 TextLengthPtr 输出参数:指向缓冲区的指针,返回MessageText中的字节总数。如果返回字节数大于BufferLength,则MessageText中的诊断信息文本被截断成BufferLength减去NULL结尾字符的长度。
  • 参数 表1 SQLGetData参数 关键字 参数说明 StatementHandle 语句句柄,通过SQLAllocHandle获得。 Col_or_Param_Num 要返回数据的列号。结果集的列按增序从1开始编号。书签列的列号为0。 TargetType TargetValuePtr缓冲中的C数据类型的类型标识符。若TargetType为SQL_ARD_TYPE,驱动使用ARD中SQL_DESC_CONCISE_TYPE字段的类型标识符。若为SQL_C_DEFAULT,驱动根据源的SQL数据类型选择缺省的数据类型。 TargetValuePtr 输出参数:指向返回数据所在缓冲区的指针。 BufferLength TargetValuePtr所指向缓冲区的长度。 StrLen_or_IndPtr 输出参数:指向缓冲区的指针,在此缓冲区中返回长度或标识符的值。
  • 原型 1 2 3 4 5 6 SQLRETURN SQLGetData(SQLHSTMT StatementHandle, SQLUSMALLINT Col_or_Param_Num, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLLEN BufferLength, SQLLEN *StrLen_or_IndPtr);
  • 参数 表1 SQLFreeHandle参数 关键字 参数说明 HandleType SQLFreeHandle要释放的句柄类型。必须为下列值之一: SQL_HANDLE_ENV SQL_HANDLE_DBC SQL_HANDLE_STMT SQL_HANDLE_DESC 如果HandleType不是这些值之一,SQLFreeHandle返回SQL_INVALID_HANDLE。 Handle 要释放的句柄。
  • 返回值 SQL_SUCCESS:表示调用正确。 SQL_SUCCESS_WITH_INFO:表示会有一些警告信息。 SQL_NEED_DATA:表示在执行SQL语句前没有提供足够的参数。 SQL_ERROR:表示比较严重的错误,如:内存分配失败、建立连接失败等。 SQL_NO_DATA:表示SQL语句不返回结果集。 SQL_INVALID_HANDLE:表示调用无效句柄。其他API的返回值同理。 SQL_STILL_EXECUTING:表示语句正在执行。
  • 返回值 SQL_SUCCESS:表示调用正确。 SQL_SUCCESS_WITH_INFO:表示会有一些警告信息。 SQL_NEED_DATA:在执行SQL语句前没有提供足够的参数。 SQL_ERROR:表示比较严重的错误,如:内存分配失败、建立连接失败等。 SQL_INVALID_HANDLE:表示调用无效句柄。其他API的返回值同理。 SQL_STILL_EXECUTING:表示语句正在执行。 SQL_NO_DATA:表示SQL语句不返回结果集。
共100000条