我有一个带有以下数据的sqlite数据库:
[ouhma@testing ~]$ sqlite3 /home/ouhma/test.db "select col1, col2 from mytable;"
201507|9063104793
201507|9212527372
201507|9212533474
201507|9212575626
201507|9212576618
201507|9212587832
201507|9322355921
201507|9322743536
201507|9334886428
201507|9334901403
但是当我尝试通过这种方式在C程序下运行相同的查询时:
if (sqlite3_open(filedb, &db) != SQLITE_OK) {
fprintf(stderr, "Error opening db: %s\n", sqlite3_errmsg(db));
return EXIT_FAILURE;
}
char * sql = "select col1, col2 from mytable;";
iret = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (iret != SQLITE_OK) {
printf("Error SQLITE %d when preparing the query.\n", iret);
return EXIT_FAILURE;
}
ncolumns = sqlite3_data_count(stmt);
printf("Columns: %d\n", ncolumns);
if (ncolumns == 0) {
printf("No data :(\n");
sqlite3_finalize(stmt);
return EXIT_SUCCESS;
}
...
而不是像以前一样返回相同的行,数据计数为零,然后我无法检索到我需要的信息。
[ouhma@testing ~]$ /home/ouhma/querydb2 /home/ouhma/query.txt /home/ouhma/test.db /home/ouhma/output.txt
Columns: 0
No data :(
我已经检查了some C examples,并且准备语句看起来没问题。
那我解雇的是什么?如果db包含数据,为什么返回0行?
答案 0 :(得分:1)
sqlite3_data_count(P)接口返回预准备语句P的结果集的当前行中的列数。如果准备好的语句P没有准备好返回结果...则sqlite3_data_count(P)返回0.
目前没有行;该语句没有准备好返回的结果,因为你从未执行它(使用sqlite3_step())。