2013-05-01 6 views
1

было интересно, если кто-то может поделиться, как извлекать данные из SQLite с несколькими записями, то есть у меня есть таблица с 5 полей каждая имеет множество данных.извлечения данных из SQLite с несколькими записями

NSString *str = [[NSString alloc] initWithFormat:@"%@ %@ etc...", oneString,two...]; 

[entry addObject:str]; 

я получаю только первая запись

еще одно ниже строка работает

NSString *sql = [NSString stringWithFormat:@"SELECT * FROM abc"]; 

но это один не, я получаю аварию!

NSString *sql = [NSString stringWithFormat:@"SELECT * FROM abc WHERE name= \"john\""]; 

ответ

5
-(NSMutableArray *)readInformationFromDatabase 
{ 
NSMutableArray *array = [[NSMutableArray alloc] init]; 

// Setup the database object 
sqlite3 *database; 

// Open the database from the users filessytem 
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
{ 
    // Setup the SQL Statement and compile it for faster access 

    //SQLIte Statement 
    NSString *sqlStatement_userInfo =[NSString stringWithFormat:@"Select * from TableName"]; 

    sqlite3_stmt *compiledStatement; 


    if(sqlite3_prepare_v2(database, [sqlStatement_userInfo UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK) 
    { 

     // Loop through the results and add them to the feeds array 
     while(sqlite3_step(compiledStatement) == SQLITE_ROW) 
     { 
      // Init the Data Dictionary 
      NSMutableDictionary *_dataDictionary=[[NSMutableDictionary alloc] init]; 

      NSString *_userName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)]; 
      // NSLog(@"_userName = %@",_userName); 

      NSString *_emailID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]; 
      // NSLog(@"_emailID = %@",_emailID); 

      NSString *_contactNumber = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]; 
      // NSLog(@"_contactNumber = %@",_contactNumber); 

      NSString *_address = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)]; 
      // NSLog(@"_address = %@",_address); 

      NSString *_zipCode = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 4)]; 
      // NSLog(@"_zipCode = %@",_zipCode); 

      [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_userName] forKey:@"UserName"]; 
      [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_emailID] forKey:@"EmailId"]; 
      [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_contactNumber] forKey:@"ContactNumber"]; 
      [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_address] forKey:@"Address"]; 
      [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_zipCode] forKey:@"ZIPCode"]; 

      [array addObject:_dataDictionary]; 
     } 
    } 
    else 
    { 
     NSLog(@"No Data Found"); 
    } 

    // Release the compiled statement from memory 
    sqlite3_finalize(compiledStatement); 
} 

sqlite3_close(database); 

return array; 
} 
1

Вы можете использовать это, как показано ниже:

/=========================== =====================================
МЕТОД Получение данных из базы ==== ================================================== ============
/

-(NSMutableArray *)getData:(NSString *)query 
{ 


//NSLog(@"QUERY : %@",query); 

NSString *[email protected]""; 
NSMutableArray *returnArray = [NSMutableArray new]; 
if(sqlite3_open([[self dataFilePath] UTF8String], &database) == SQLITE_OK) 
{ 
    sqlite3_stmt *statement; 
    if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil)==SQLITE_OK) 
    { 
     while(sqlite3_step(statement)==SQLITE_ROW) 
     { 
      NSMutableDictionary *temp= [NSMutableDictionary new]; 
      const char *s; 



      s=(char *)sqlite3_column_text(statement, 0); // Here 0 is the first column index 
      if(s==NULL) 
      { 
       [email protected]""; 
      } 
      else 
      { 
       idToReturn =[NSString stringWithUTF8String:s]; 
      } 
      [temp setObject:idToReturn forKey:@"firstData"]; 

      s=(char *)sqlite3_column_text(statement, 1); 
      if(s==NULL) 
      { 
       [email protected]""; 
      } 
      else 
      { 
       idToReturn =[NSString stringWithUTF8String:s]; 
      } 
      [temp setObject:idToReturn forKey:@"secondData"]; 

      s=(char *)sqlite3_column_text(statement, 2); 
      if(s==NULL) 
      { 
       [email protected]""; 
      } 
      else 
      { 
       idToReturn =[NSString stringWithUTF8String:s]; 
      } 
      [temp setObject:idToReturn forKey:@"thirdData"]; 

      s=(char *)sqlite3_column_text(statement, 3); 
      if(s==NULL) 
      { 
       [email protected]""; 
      } 
      else 
      { 
       idToReturn =[NSString stringWithUTF8String:s]; 
      } 
      [temp setObject:idToReturn forKey:@"forthData"]; 

      s=(char *)sqlite3_column_text(statement, 5); 
      if(s==NULL) 
      { 
       [email protected]""; 
      } 
      else 
      { 
       idToReturn =[NSString stringWithUTF8String:s]; 
      } 
      [temp setObject:idToReturn forKey:@"fifthData"]; 

      if (temp != nil) 
      { 
       [returnArray addObject:temp]; 

       temp = nil; 
      } 

     } 
     sqlite3_finalize(statement); 
     sqlite3_close(database); 
    } 
} 
return returnArray; 

}

Тогда называют это как:

NSString *query = [NSString stringWithFormat:@"select * from tablename"]; 
NSMutableArray *data = [self getData:query]; 

Надеется, что это помогает.

+0

Спасибо, но как я могу узнать, на какой записи я на данный момент? также, если у меня есть 100 записей, как я могу искать эту определенную строку. Кто-нибудь знает, что случилось с приведенной ниже командой sqlite? NSString * SQL = [NSString stringWithFormat: @ "SELECT * FROM аЬс WHERE имя = \" \ "джон"] он выходит из строя, когда я исполню ее. Еще раз спасибо за помощь. –

+0

Привет, Нишан, не уверен, что форум позволяет вам связаться с вами в частном порядке? если да, то я подхожу к вашей электронной почте, я хотел бы спросить и предложить. Благодарю. –

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