【发布时间】:2011-05-12 10:16:02
【问题描述】:
假设我有一个名为 Incidents 的表和一个名为 Devices 的表。
每个设备都有一个 CI 代码。
我想创建一个 tableView,在部分中包含设备 (CI) 的名称,以及代表事件的每一行。 为了获得每个部分下的正确行数,我使用以下代码:
NSMutableArray *lijstDevices = [[NSMutableArray alloc] init];
const char *dbpath = [appDelegate.databasePath UTF8String];
sqlite3_stmt *statement;
if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK)
{
NSString *querySQL = [NSString stringWithFormat:@"SELECT DISTINCT CI FROM Devices"];
const char *query_stmt = [querySQL UTF8String];
if (sqlite3_prepare_v2(contactDB, query_stmt, -1, &statement, NULL) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
// NSLog(@"SQLite ROW for filling in cell");
NSString *addDev = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement, 0)];
[lijstDevices addObject:addDev];
}
sqlite3_finalize(statement);
}
NSString *ciNaam = [lijstDevices objectAtIndex:section];
NSString *querySQL2 = [NSString stringWithFormat:@"SELECT COUNT(ID) FROM Incidents WHERE CI='%@'", ciNaam];
const char *query_stmt2 = [querySQL2 UTF8String];
if (sqlite3_prepare_v2(contactDB, query_stmt2, -1, &statement, NULL) == SQLITE_OK)
{
//NSLog(@"SQLite ok in rowforindexpath");
if(sqlite3_step(statement) == SQLITE_ROW) {
// NSLog(@"SQLite ROW for filling in cell");
teller = sqlite3_column_int(statement, 0);
}
else
{
NSLog(@"Not.. good...");
}
sqlite3_finalize(statement);
}
sqlite3_close(contactDB);
}
问题来了:这些部分填充正确。有些部分需要 1 行,其他部分需要 2 行。每当我运行该程序时,需要 1 行的每个部分都以 0 行结束,而需要 2 行的每个部分最终只有 1 行。
除此之外,我还有一个错误,之前没有清理表格。因此,如果我运行它两次,数据库的行数就会增加一倍。在这种情况下,每个需要 1 的人都有 2 行。每个需要 2 个的,有 4 行。显然情况不再如此,但它可能有助于理解问题所在。
有人知道吗???
【问题讨论】:
-
尝试 SELECT * COUNT() FROM Incidents WHERE CI='%@'
-
我猜你提到了 SELECT COUNT (*),@ViTo Brothers Apoyan,但它也没有成功:(它得到了正确的数字,只是减半......或类似的东西
标签: iphone sql objective-c ios sqlite