2013-04-10 78 views
1

当调用相同的'DBName'值时,下面的函数返回不同的bool值。我期待着找到重复。在第一次尝试它的工作和第二次尝试它没有。我做错了什么?Sqlite返回不同​​的值 - iOS

-(BOOL)CheckForDB:(NSString *)dbPath{ 
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { 
    if(checkForDB == nil){ 

     const char *sql = "SELECT COUNT(*) FROM BookingInfo WHERE DBName = ?"; 
     if(sqlite3_prepare_v2(database, sql, -1, &checkForDB, NULL) != SQLITE_OK) { 
      NSAssert1(0, @"Error while fetching uploaded status. '%s'", sqlite3_errmsg(database)); 
     } 
    } 

    sqlite3_bind_text(checkForDB, 1, [dbName UTF8String], -1, SQLITE_TRANSIENT); 

      NSLog(@"checking status %@",dbName); 
    while(sqlite3_step(checkForDB) == SQLITE_ROW) { 



     NSString *status=[NSString stringWithUTF8String:(char *)sqlite3_column_text(checkForDB, 0)]; 
     return [status boolValue]; 
    } 

    return NO; 
    sqlite3_reset(checkForDB); 


}else{ 
    sqlite3_close(database); 
    } 
} 

回答

1

我找到了解决方案。我要打电话sqlite3_reset(checkForDB)一个更多的时间之前,我打电话回YES

while(sqlite3_step(checkForDB) == SQLITE_ROW) { 



    NSString *status=[NSString stringWithUTF8String:(char *)sqlite3_column_text(checkForDB, 0)]; 
    sqlite3_reset(checkForDB) 
    return [status boolValue]; 
} 
+0

你必须改变句子'sqlite3_reset(checkForDB)的订单的订单;'和'返回NO;'还,否则'sqlite3_reset'永远不会被调用,事实上编译器优化会在返回后删除所有的指令,因为它们永远不会到达 – tkanzakic 2013-04-10 07:56:47