我没有找到如何使用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
答案 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
}