Iphone SQLite3计数不正确
假设我有一张叫做“事件”的表和一张叫做“设备”的表 每个设备都有一个CI代码 我想创建一个tableView,在部分中包含设备(CI)的名称,每一行表示一个事件。 为了获得每个部分下的正确行数,我使用以下代码:Iphone SQLite3计数不正确,iphone,sql,objective-c,ios,sqlite,Iphone,Sql,Objective C,Ios,Sqlite,假设我有一张叫做“事件”的表和一张叫做“设备”的表 每个设备都有一个CI代码 我想创建一个tableView,在部分中包含设备(CI)的名称,每一行表示一个事件。 为了获得每个部分下的正确行数,我使用以下代码: NSMutableArray *lijstDevices = [[NSMutableArray alloc] init]; const char *dbpath = [appDelegate.databasePath UTF8String]; sqlite3_stmt *statemen
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行。显然,情况已经不是这样了,但这可能有助于理解问题所在
有人有什么想法吗?你看到这个例子并检查一下
-(void)ChekInDataBase{
sqlite3 *database;
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)
{
NSString *sqlStatement = [NSString stringWithFormat:@"SELECT count(id) as countRow FROM password"];
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, [sqlStatement cStringUsingEncoding:NSUTF8StringEncoding], -1, &compiledStatement, NULL) == SQLITE_OK)
{
NSLog(@"%@",sqlStatement);
if (sqlite3_step(compiledStatement) == SQLITE_ROW)
{
countRow = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement,0 )]intValue] ;
}
}
sqlite3_finalize(compiledStatement);
if (countRow > 0)
{
[yesBtnPressed setImage:[UIImage imageNamed:@"yes_tab_over.png"]forState:UIControlStateNormal];
[noBtnPressed setImage:[UIImage imageNamed:@"no_tab.png"]forState:UIControlStateNormal];
[noBtnPressed setUserInteractionEnabled:TRUE];
[yesBtnPressed setUserInteractionEnabled:FALSE];
}
else
{
[yesBtnPressed setImage:[UIImage imageNamed:@"yes_tab.png"]forState:UIControlStateNormal];
[noBtnPressed setImage:[UIImage imageNamed:@"no_tab_over.png"]forState:UIControlStateNormal];
[noBtnPressed setUserInteractionEnabled:FALSE];
[yesBtnPressed setUserInteractionEnabled:TRUE];
}
sqlite3_close(database);
}
}
这一行没有错误。显然,CI代码没有正确添加到表中。有时它会显示正确的CI代码(我可以在列表中看到),但其他CI代码只有(null)或1作为代码 试着从CI='%@'的事件中选择*COUNT(),我猜你选择了COUNT(*),@ViTo Brothers Apoyan,但也没有成功:(它得到了正确的数字,只减半了..或者类似的东西。我将行改为
@“从CI='%@'的事件中选择COUNT(ID)作为CountRow,ciNaam];
,但恐怕没有效果:(u在sqllite中检查此查询…u将了解将在何处创建错误。)