2012-05-10 27 views
-1

我正在開發一個應用程序,其中我想從SQlite中的多個表中獲取數據。如何在iPhone應用程序開發中運行多個SQlite查詢

-(void)checkAndCreateDatabase{ 
    BOOL success; 
    NSFileManager *fileManager=[NSFileManager defaultManager]; 
    success=[fileManager fileExistsAtPath:databasePath]; 
    if(success) 
     return; 

    NSString *databasePathFromApp = [[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent:databaseName]; 
    [fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil]; 
} 
-(void)readData{ 
    sqlite3 *database; 
    genderList=[[NSMutableArray alloc]init]; 
    if(sqlite3_open([databasePath UTF8String], &database)== SQLITE_OK){ 
     const char *sqlStatement = "select name from gender"; 
     sqlite3_stmt *compiledStatement; 
     if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL)==SQLITE_OK){ 
      while (sqlite3_step(compiledStatement)==SQLITE_ROW) { 
       NSInteger pId = sqlite3_column_int(compiledStatement, 0); 
       NSString *stringName=[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]; 
       db *info =[[db alloc]initWithID:pId andName:stringName]; 
       [genderList addObject:info]; 
      }    
     } 
     sqlite3_finalize(compiledStatement); 
    } 
    sqlite3_close(database); 
} 

在上面的代碼中,我通過了性別的查詢選擇名稱。同時我想通過從內容中選擇名稱並將其保存在不同的數組中。我怎樣才能做到這一點?

回答

0

您可以像使用明智的代碼

-(NSUInteger)getCounter:(NSUInteger)id{ 
    NSUInteger final=0; 

    NSMutableArray *ar=[[NSMutableArray alloc] init]; 
    NSString *strQuery=[NSString stringWithFormat:@"select qty from Datatable where id=?"]; 
    const char *query=[strQuery UTF8String]; 
    sqlite3_stmt *compiledStmt; 
    if(sqlite3_open([self.dbPath UTF8String], &database)==SQLITE_OK) { 
     if(sqlite3_prepare_v2(database, query, -1, &compiledStmt, NULL)==SQLITE_OK){ 
      sqlite3_bind_int(compiledStmt, 1, id); 
      while (sqlite3_step(compiledStmt)==SQLITE_ROW) { 
       GET_Integer(qty,0); 
       final=qty; 
       [ar addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:qty],@"qty",nil]]; 
      } 
     } else { 
      NSLog(@"Invalid query"); 
     } 
    } else { 
     NSLog(@"error while opening database."); 
    } 

    return final; 
} 

使用內聯函數整數

#define GET_Integer(_TO_,_FROM_) NSUInteger _TO_; { \ 
_TO_ = sqlite3_column_int(compiledStmt,_FROM_); \ 
} 

也更多使用

#define PUT_Value(_TO_,_FROM_) { \ 
    NSString *str=[dObj valueForKey:_FROM_]; \ 
    if(!str) [email protected]" "; \ 
    sqlite3_bind_text(compiledStmt,_TO_,[str UTF8String],-1,SQLITE_TRANSIENT); \ 
} 

#define PUT_Integer(_TO_,_FROM_) { \ 
    NSInteger numbr=[[dObj valueForKey:_FROM_] intValue]; \ 
    sqlite3_bind_int(compiledStmt,_TO_,numbr); \ 
} 


#define PUT_Double(_TO_,_FROM_) { \ 
CGFloat doubleX=[[dObj valueForKey:_FROM_] floatValue]; \ 
sqlite3_bind_double(compiledStmt,_TO_,doubleX); \ 
} 



#define GET_Value(_TO_,_FROM_) NSString *_TO_; { \ 
const unsigned char *c=sqlite3_column_text(compiledStmt,_FROM_); \ 
_TO_= c ? [NSString stringWithUTF8String:(char*)c] : @"" ; \ 
} 

#define GET_Double(_TO_,_FROM_) double _TO_;{ \ 
_TO_=sqlite3_column_double(compiledStmt,_FROM_); \ 
} 
+0

我想在新增兩個奎雷斯..分別以在上面的代碼中添加我的第二個查詢 – makumar

+0

您需要創建一個類,其中有一些函數在那裏,然後逐個調用該函數 –

+0

嗨Samuel ..謝謝..因爲我正在動態表視圖我無法從不同的類獲取數據。 。這就是我要求在不同陣列中的一個類存儲中運行所有查詢的原因。 – makumar

相關問題