3.4. 查询执行函数 #
3.4.1. 主例程 #
Exec向后端服务器发送一条查询。通常更可取的是使用下面两个函数之一。ExecStatusType PgConnection::Exec(const char* query)返回查询的结果。可能得到下列状态值:
PGRES_EMPTY_QUERY PGRES_COMMAND_OK(查询是一条命令时) PGRES_TUPLES_OK(查询成功返回元组时) PGRES_COPY_OUT PGRES_COPY_IN PGRES_BAD_RESPONSE(收到意外响应时) PGRES_NONFATAL_ERROR PGRES_FATAL_ERROR ExecCommandOk向后端服务器发送一条命令查询。int PgConnection::ExecCommandOk(const char *query)命令查询成功时返回 TRUE。
ExecTuplesOk向后端服务器发送一条命令查询。int PgConnection::ExecTuplesOk(const char *query)命令查询成功时返回 TRUE。
ErrorMessage返回最后一条错误消息的文本。const char *PgConnection::ErrorMessage()
3.4.2. 获取 SELECT 结果信息 #
Tuples返回查询结果中元组(行)的数目。int PgDatabase::Tuples()Fields返回查询结果中每个元组的字段(属性)数目。int PgDatabase::Fields()FieldName返回与给定字段索引相关联的字段(属性)名。字段索引从 0 开始。const char *PgDatabase::FieldName(int field_num)FieldNumPQfnumber 返回与给定字段名相关联的字段(属性)索引。int PgDatabase::FieldNum(const char* field_name)如果给定的名称不匹配任何字段,则返回 -1。
FieldType返回与给定字段索引相关联的字段类型。返回的整数是该类型的内部编码。字段索引从 0 开始。Oid PgDatabase::FieldType(int field_num)FieldType返回与给定字段名相关联的字段类型。返回的整数是该类型的内部编码。字段索引从 0 开始。Oid PgDatabase::FieldType(const char* field_name)FieldSize返回与给定字段索引相关联的字段的字节大小。字段索引从 0 开始。short PgDatabase::FieldSize(int field_num)返回数据库元组中为该字段分配的空间(按字段编号给出)。换句话说,就是服务器上该数据类型二进制表示的大小。如果字段是变长的,则返回 -1。
FieldSize返回与给定字段索引相关联的字段的字节大小。字段索引从 0 开始。short PgDatabase::FieldSize(const char *field_name)返回数据库元组中为该字段分配的空间(按字段名给出)。换句话说,就是服务器上该数据类型二进制表示的大小。如果字段是变长的,则返回 -1。
3.4.3. 获取 SELECT 结果值 #
GetValue返回 PGresult 中某个元组的单个字段(属性)值。元组和字段索引从 0 开始。const char *PgDatabase::GetValue(int tup_num, int field_num)对大多数查询来说,GetValue 返回的是属性值的以空字符结尾的 ASCII 字符串表示。但如果 BinaryTuples() 为 TRUE,GetValue 返回的是该类型以后端服务器内部格式表示的二进制表示(如果字段是变长的,则不包括长度字)。这时由程序员负责把数据造型和转换为正确的 C 类型。GetValue 返回的指针指向 PGresult 结构一部分的存储。不应修改它,如果要在 PGresult 结构自身的生存期之后使用该值,必须把它显式复制到其他存储中。BinaryTuples() 尚未实现。
GetValue返回 PGresult 中某个元组的单个字段(属性)值。元组和字段索引从 0 开始。const char *PgDatabase::GetValue(int tup_num, const char *field_name)对大多数查询来说,GetValue 返回的是属性值的以空字符结尾的 ASCII 字符串表示。但如果 BinaryTuples() 为 TRUE,GetValue 返回的是该类型以后端服务器内部格式表示的二进制表示(如果字段是变长的,则不包括长度字)。这时由程序员负责把数据造型和转换为正确的 C 类型。GetValue 返回的指针指向 PGresult 结构一部分的存储。不应修改它,如果要在 PGresult 结构自身的生存期之后使用该值,必须把它显式复制到其他存储中。BinaryTuples() 尚未实现。
GetLength返回字段(属性)的字节长度。元组和字段索引从 0 开始。int PgDatabase::GetLength(int tup_num, int field_num)这是该数据值的实际数据长度,即 GetValue 所指向对象的大小。注意,对于以 ASCII 表示的值,这个大小与 PQfsize 报告的二进制大小关系不大。
GetLength返回字段(属性)的字节长度。元组和字段索引从 0 开始。int PgDatabase::GetLength(int tup_num, const char* field_name)这是该数据值的实际数据长度,即 GetValue 所指向对象的大小。注意,对于以 ASCII 表示的值,这个大小与 PQfsize 报告的二进制大小关系不大。
DisplayTuples把所有元组以及可选的属性名打印到指定的输出流。void PgDatabase::DisplayTuples(FILE *out = 0, int fillAlign = 1, const char* fieldSep = "|",int printHeader = 1, int quiet = 0)PrintTuples把所有元组以及可选的属性名打印到指定的输出流。void PgDatabase::PrintTuples(FILE *out = 0, int printAttName = 1, int terseOutput = 0, int width = 0)
3.4.4. 获取非 SELECT 结果信息 #
CmdTuples返回 INSERT、UPDATE 或 DELETE 之后受影响的行数。如果是其他命令,返回 -1。int PgDatabase::CmdTuples()OidStatusconst char *PgDatabase::OidStatus()
3.4.5. 处理 COPY 查询 #
GetLineint PgDatabase::GetLine(char* string, int length)PutLinevoid PgDatabase::PutLine(const char* string)EndCopyint PgDatabase::EndCopy()