2013-05-01 96 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 abc WHERE name = \」john \「」] 當我執行它時崩潰。 再次感謝您的幫助。 – 2013-05-02 09:22:01

+0

您好Nishant,不確定論壇是否允許私下與您聯繫?如果是我適合您的電子郵件,我想問問並提供。謝謝。 – 2013-05-02 12:03:33