我有一个由10条记录组成的数据库,我想把它分成两部分。作为初学者,我使用以下行:res = PQexec(conn," SELECT * FROM table_name LIMIT 5 OFFSET 0");并且它给出了正确的前5个条目,但我想使用PQexecParams做同样的事情,我可以让用户选择限制和偏移量。我在链接中找到了一个工作示例:http://timmurphy.org/2009/11/19/pqexecparams-example-postgresql-query-execution-with-parameters/并在我的程序中实现了相同的功能。虽然限制/偏移条目不是来自用户端(我稍后将使用scanf),但我的代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <libpq-fe.h>
#include <string.h>
int main()
{
PGconn *conn;
PGresult *res;
int nFields=0,row=0,col=0;
int lim = htonl(5);
int off = htonl(0);
const char *paramValues[2] = {(char *)&lim, (char *)&off};
int lengths[2] = {sizeof(lim), sizeof(off)};
int binary[2] = {1, 1};
conn = PQconnectdb("dbname=test1 host=localhost user=postgres password=XXX");
if(PQstatus(conn) == CONNECTION_BAD)
{
fprintf(stderr, "Connection to database \"%s\" failed.\n", PQerrorMessage(conn));
fprintf(stderr, "%s", PQerrorMessage(conn));
}
res = PQexecParams(conn,
"SELECT * FROM table_name LIMIT=$1::int4 OFFSET=$2::int4",
2,
NULL,
paramValues,
lengths,
binary,
0);
// res = PQexec(conn, "SELECT * FROM table_name LIMIT 5 OFFSET 0");
if((!res) || (PQresultStatus(res) != PGRES_TUPLES_OK))
{
fprintf(stderr, "SELECT command did not return tuples properly\n");
PQclear(res);
}
for(row=0;row<PQntuples(res);row++)
{
printf("%s\n",PQgetvalue(res,row,1));
}
PQfinish(conn);
return 0;
}
每次我运行程序时,我都会收到注释&#34; SELECT命令没有正确返回元组&#34;没有任何编译或任何其他错误。
请建议一个可能的解决方案或我犯错的地方。作为一个新手,我也有一个问题是,是否总是需要将整数参数传递到PQexecParams的网络字节顺序?