0

我没有找到如何使用 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(*) 查询时,我不知道如何简单地捕捉答案。提前感谢您的回答!再见

4

2 回答 2

0

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

于 2013-06-19T01:45:56.953 回答
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
}
于 2013-06-19T02:03:49.020 回答