1. 执行查询:
PGresult *res = PQexec(conn, "SELECT column1, column2 FROM mytable");
2. 检查查询是否成功:
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
fprintf(stderr, "Query execution failed: %s", PQerrorMessage(conn));
PQclear(res);
// Handle error
}
3. 获取查询结果的行数:
int rows = PQntuples(res);
4. 一行一行地检索结果:
for (int i = 0; i < rows; ++i) {
// 获取第 i 行的值
const char *column1_value = PQgetvalue(res, i, 0);
const char *column2_value = PQgetvalue(res, i, 1);
// 处理每一行的值
printf("Row %d: column1=%s, column2=%s\n", i, column1_value, column2_value);
}
5. 释放查询结果对象:
PQclear(res);
注意事项:
- PQgetvalue 函数用于获取指定行和列的值,返回的是一个字符串。如果需要按照不同的数据类型获取值,需要进行适当的转换。
- 注意检查查询执行的状态,确保查询成功执行后再进行结果的处理。
- 使用 PQclear 释放查询结果对象,以释放相关的内存。
以下是一个完整的例子:
#include <libpq-fe.h>
#include <stdio.h>
int main() {
const char *conninfo = "dbname=mydatabase user=myuser password=mypassword";
PGconn *conn = PQconnectdb(conninfo);
if (PQstatus(conn) != CONNECTION_OK) {
fprintf(stderr, "Connection to database failed: %s\n", PQerrorMessage(conn));
PQfinish(conn);
return 1;
}
PGresult *res = PQexec(conn, "SELECT column1, column2 FROM mytable");
if (PQresultStatus(res) != PGRES_TUPLES_OK) {
fprintf(stderr, "Query execution failed: %s\n", PQerrorMessage(conn));
PQclear(res);
PQfinish(conn);
return 1;
}
int rows = PQntuples(res);
for (int i = 0; i < rows; ++i) {
const char *column1_value = PQgetvalue(res, i, 0);
const char *column2_value = PQgetvalue(res, i, 1);
printf("Row %d: column1=%s, column2=%s\n", i, column1_value, column2_value);
}
PQclear(res);
PQfinish(conn);
return 0;
}
这个例子中,连接到数据库后执行了一个简单的查询,并逐行输出查询结果。请根据实际需要进行适当的修改和扩展。
转载请注明出处:http://www.zyzy.cn/article/detail/8373/PostgreSQL