2013-05-01 3 views
0

У меня есть база данных sqlite в приложении Document Folder. Я храню данные из NSDictionary в sqlite DB. Я хочу, как понять, сколько строк есть в базе данных sqlite и поместить его в переменную NSString.Как понять количество строк sqlite count?

Это мой код для хранения данных в SQLite (в папке Document):

#define DatabaseName @"data.sqlite" 
@implementation ViewController 
- (void)viewDidLoad 
{ 
    //NSString *rowNumber = I dont know how to Obtain number of rows... 
    [super viewDidLoad]; 
    NSArray *idd = [NSArray arrayWithObjects:@"122",@"234",@"453", nil]; 
    NSArray *name = [NSArray arrayWithObjects:@"janatan",@"fred",@"john", nil]; 
    NSArray *age = [NSArray arrayWithObjects:@"23",@"35",@"12", nil]; 
    NSArray *sex = [NSArray arrayWithObjects:@"male",@"male",@"male", nil]; 
    NSString *query2 = [NSString stringWithFormat:@"select * from table1 where name = 'john'"]; 
    NSLog(@"query : %@",query2); 
    BOOL recordExist = [self recordExistOrNot:query2]; 
    if (!recordExist) { 
     for (int i = 0; i < [idd count]; i++) { 
      NSString * a = [idd objectAtIndex:i]; 
      NSString * b = [name objectAtIndex:i]; 
      NSString * c = [age objectAtIndex:i]; 
      NSString * d = [sex objectAtIndex:i]; 
      NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:a,@"id",b,@"name",c,@"age",d,@"sex", nil]; 
      NSString *query = [NSString stringWithFormat:@"insert into table1 (id,name,age,sex) values('%@','%@','%@','%@')",[dic objectForKey:@"id"],[dic objectForKey:@"name"],[dic objectForKey:@"age"],[dic objectForKey:@"sex"]]; 
      NSLog(@"%@",query); 
      [self executeQuery:query]; 
     } 
    } 
} 
-(NSString *) dataFilePath { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    //NSLog(@"PATH %@",[documentsDirectory stringByAppendingPathComponent:DatabaseName]); 
    return [documentsDirectory stringByAppendingPathComponent:DatabaseName]; 
} 
/*================================================================== 
METHOD FOR CHECKING WHETHER RECORD EXISTS OR NOT IN DATABASE 
==================================================================*/ 
-(BOOL)recordExistOrNot:(NSString *)query{ 
    BOOL recordExist=NO; 
    if(sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK) { 
     sqlite3_stmt *statement; 
     if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil)==SQLITE_OK) { 
      if (sqlite3_step(statement)==SQLITE_ROW) { 
       recordExist=YES; 
      } else { 
       //////NSLog(@"%s,",sqlite3_errmsg(database)); 
      } 
      sqlite3_finalize(statement); 
      sqlite3_close(database); 
     } 
    } 
    return recordExist; 
} 
/*================================================================== 
METHOD FOR INSERTING DATA IN DATABASE 
==================================================================*/ 
-(void)executeQuery:(NSString *)query { 
    sqlite3_stmt *statement; 
    if(sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK) { 
     if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK) { 
      if (sqlite3_step(statement) != SQLITE_DONE) { 
       sqlite3_finalize(statement); 
      } 
     } else { 
      NSLog(@"query Statement Not Compiled"); 
     } 
     sqlite3_finalize(statement); 
     sqlite3_close(database); 
    } else { 
     NSLog(@"Data not Opened"); 
    } 
} 
@end 

Вы угадали топ NSArray имеет сколько значений (не четыре).

+0

[fetchedArray count] даст вам счет, не так ли. –

ответ

2

Пожалуйста, попробуйте использовать этот один

выполнить этот запрос

select count(*) from table_name; 

- (int) getNumberOfRecord 
{ 
    int count = 0; 
    if (sqlite3_open([self.dataBasePath UTF8String], &database) == SQLITE_OK) 
    { 
     const char* sqlStatement = "SELECT COUNT(*) FROM table1"; 
     sqlite3_stmt *statement; 

     if(sqlite3_prepare_v2(database, sqlStatement, -1, &statement, NULL) == SQLITE_OK) 
     { 
      //Loop through all the returned rows (should be just one) 
      while(sqlite3_step(statement) == SQLITE_ROW) 
      { 
       count = sqlite3_column_int(statement, 0); 
      } 
     } 
     else 
     { 
      NSLog(@"Failed from sqlite3_prepare_v2. Error is: %s", sqlite3_errmsg(database)); 
     } 

     // Finalize and close database. 
     sqlite3_finalize(statement); 
     sqlite3_close(database); 
    } 

    return count; 
} 

я надеюсь, что его помощь и.

Смежные вопросы