在iPhone上的SQLite,无法获得一行结果

时间:2013-06-19 01:35:32

标签: ios sqlite

我没有找到如何使用iOS本机库在SQLite中获取单行查询结果。 事实上我需要它来制作COUNT(*),但我发现的唯一方法是:

- (int)HowManyInMyDB:(int)user_id {

int isInDB = 0;


NSString *query = [NSString stringWithFormat:@"SELECT * FROM USER WHERE user_id=%d;", user_id];

const char * sql = [query UTF8String];

sqlite3_stmt *statement;



if (sqlite3_prepare_v2(_database, sql, -1, &statement, nil)

    == SQLITE_OK) {

    while (sqlite3_step(statement) == SQLITE_ROW) {

        isInDB++;

    }

    sqlite3_finalize(statement);

}

    return isInDB;

}

但我不认为这是一种可靠的方式,对吗? 当我执行COUNT(*)查询时,我没有找到如何捕获简单的答案。 提前谢谢你的答案! BYEBYE

2 个答案:

答案 0 :(得分:0)

所以看起来你试图用相同的user_id找到USER表中的行数?您应该使用SQL查询,例如“SELECT COUNT(*)AS answer FROM USER WHERE user_id =%d”。这将产生一行输出,并且该输出将具有条目“回答”,其中值是您想要的数字。您需要使用SQLite API读取1行,并从其“回答”条目中获取值。所以你一次调用sqlite3_step(),sqlite3_column_count()一次,仔细检查你收到的结果(它应该返回1)和sqlite3_column(语句,0)一次,以从第一列获得结果。

答案 1 :(得分:0)

以下是一种方法(请注意使用sqlite3_bind_int来应用user_id):

- (int)HowManyInMyDB:(int)user_id {
    sqlite3_stmt *statement;

    if (sqlite3_prepare_v2(_database, "SELECT COUNT(*) FROM USER WHERE user_id=?", -1, &statement, NULL) == SQLITE_OK ) {
        sqlite3_bind_int(statement, 1, user_id);

        int count = 0;
        if (sqlite3_step(statement) == SQLITE_ROW) {
            count = sqlite3_column_int(statement, 0);
        }

        // Finalize the statement
        sqlite3_finalize(statement);

        return count;
    } else {
        NSLog(@"Failed from sqlite3_prepare_v2. Error is: %s", sqlite3_errmsg(_database) );
    }

    return -1; // indicate an error
}