PQprepare
功能描述
用给定的参数提交请求,创建一个预备语句,然后等待结束。
接口原型
PGresult *PQprepare(PGconn *conn,
const char *stmtName,
const char *query,
int nParams,
const Oid *paramTypes);
参数说明
参数名 | 参数说明 |
---|---|
conn | 建立连接时返回的连接结构体指针,该指针用于标识某个特定连接。 |
query | 命令字符串,必须只包含一条SQL命令。 |
stmtName | 用户为当前预备语句起的名字,用于后续执行时标识当前的预备语句。可以为空串,这样就创建一个无名的语句,这种情况下,任何前面存在的无名语句都会自动被代替; 否则,如果语句名已经在当前会话里定义,会导致错误。 |
nParams | 如果使用了参数, 那么在查询里它们引用成$1,$2等等。nParams 是参数的个数。 |
paramTypes[] | 参数类型的数组,里面存着每个参数的类型。如果nParams是零,那么这个数组指针可以是NULL。 paramTypes[]用 OID 的方式声明与参数符号关联的数据类型。 如果paramTypes为NULL,或者数组中某个特定元素是零, 那么服务器将用处理无类型文本同样的方法给这个参数符号赋予数据类型。还有, 查询可以使用比nParams数值更大的参数符号编号; 也为这些符号推断数据类型。(参阅PQdescribePrepared 作为一个找出推断的什么类型的手段。) |
返回值
和PQexec相似,结果通常是一个PGresult对象, 其内容表明服务器端是成功还是失败。空的结果表示内存耗尽或者完全不能发送命令。 使用PQerrorMessage获取有关这类错误的更多信息。
其他
PQprepare创建一个为后面PQexecPrepared执行用的预备语句。 这个特性允许那些重复使用的语句只分析和规划一次,而不是每次执行都分析规划。 只是在协议3.0和以后的连接里支持PQprepare;在使用2.0协议的时候,它会失败。用于PQexecPrepared的预备语句也可以通过执行SQL PREPARE语句来创建。SQL DEALLOCATE语句可以删除预备语句,但libpq函数不支持删除。