如果db包含数据,为什么sqlite3_data_count()返回0?

时间:2016-10-13 07:52:10

标签: c sqlite

我有一个带有以下数据的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行?

1 个答案:

答案 0 :(得分:1)

documentation说:

  

sqlite3_data_count(P)接口返回预准备语句P的结果集的当前行中的列数。如果准备好的语句P没有准备好返回结果...则sqlite3_data_count(P)返回0.

目前没有行;该语句没有准备好返回的结果,因为你从未执行它(使用sqlite3_step())。