2011-08-10 70 views
2

我想學習與c的sqlite3 api,然後我創建了一個表來存儲稱爲議程的名稱和電話。然後我用3行填充它。我的下一步是創建以下c代碼:檢索數據從sqlite與c

#include <stdio.h> 
#include <sqlite3.h> 

int main(int argc, char **argv) 
{ 
    sqlite3 *db; 
    sqlite3_stmt *res; 
    const char *tail; 
    int count = 0; 

    if(sqlite3_open("agenda.db", &db)) 
    { 
    sqlite3_close(db); 
    printf("Can't open database: %s\n", sqlite3_errmsg(db)); 
    return(1); 
    } 

    printf("Database connection okay!\n"); 

    if(sqlite3_prepare_v2(db, "SELECT phone,name FROM agenda ORDER BY name", 128, &res, &tail) != SQLITE_OK) 
    { 
    sqlite3_close(db); 
    printf("Can't retrieve data: %s\n", sqlite3_errmsg(db)); 
    return(1); 
    } 

    printf("Reading data...\n"); 

    printf("%16s | %32s\n", "Phone", "Name"); 

    while(sqlite3_step(res) != SQLITE_ROW) 
    { 
    printf("%16s | %32s\n", 
      sqlite3_column_text(res, 0), 
      sqlite3_column_text(res, 1)); 

    count++; 
    } 

    printf("Rows count: %d\n", count); 

    sqlite3_finalize(res); 

    sqlite3_close(db); 

    return(0); 
} 

然後編譯它與gcc -o agenda agenda.c -lsqlite3 -Wall -ggdb。但結果我得到的永遠是:

Database connection okay! 
Reading data... 
      Phone |        Name 
Rows count: 0 

但實際上也有在agenda.db文件3行。我究竟做錯了什麼?

回答

9

我相信你想while (sqlite3_step(res) == SQLITE_ROW) {而不是!=

+0

是的,就是這樣。我的錯! – Wanderson