2012-08-28 45 views
2

對不起,我試過了,我自己也沒有找到解決 我有下面的代碼在我viewDidLoad方法顯示sqlite的數據中的UITableView

NSString *docsDir; 
NSArray *dirPaths; 

dirPaths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES); 
docsDir=[dirPaths objectAtIndex:0]; 
databasePath=[[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"database.db"]]; 

NSLog(@"%@",databasePath); 
NSFileManager *filemgr=[NSFileManager defaultManager]; 

if([filemgr fileExistsAtPath:databasePath]==YES) 
{ 


[self getFinal]; 
} 
else { 
    NSLog(@"please order"); 
} 
[super viewDidLoad]; 

它調用一個稱爲getFinal 方法是如下

sqlite3_stmt *statement; 

const char *dbpath = [databasePath UTF8String]; 

if (sqlite3_open(dbpath,&database)==SQLITE_OK) 
{ 
    NSString *querySQL = [NSString stringWithFormat: @"SELECT * FROM FINALORDER"]; 

    const char *query_stmt = [querySQL UTF8String];  
    sqlite3_prepare_v2(database,query_stmt,-1,&statement,NULL); 

    if (sqlite3_step(statement) == SQLITE_ROW) 
    { 
     NSString *itemname = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)]autorelease]; 
     //itemn.text = itemname; 

     NSString *qua = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)]autorelease]; 
     //quantity.text = qua; 

     NSString *total = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 3)]autorelease]; 
     //totalcost.text=total; 
    } 


} 
    sqlite3_finalize(statement); 
    sqlite3_close(database); 

我想以tableview格式顯示itemname,qua和total。我嘗試過使用協議並實現委託以及數據源方法,但數據源方法cellforindexpath不能識別這些變量,我該怎麼做?在這裏感謝 是表視圖

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section 
    { 
    //I DONT KNOW WHAT TO RETURN HERE.. 
    } 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; 
} 

// Set up the cell... 
cell.textLabel.text = itemname //i need to get the itemname here 
cell.detailTextLabel.text = qua,total //i need the quantity and the totalcost values 

return cell; 

}

回答

0

您應該使用核心數據或爲你,爲清晰和簡單的數據庫之間的層至少FMDB代碼。

現在對於TableView問題,如果你可以發佈一些代碼,那將會很好。

+0

以及其來不及改變一切,以核心數據,我在它沒有知識,所以我不得不使用sqlite3的,但在numberrowsinsection我是什麼應該作爲一個變量來計算? – BoredToDeath

+0

我已經發布了numberrowinsection的 – BoredToDeath

+0

以上的tableview代碼,它是你桌子上的細胞數量,那應該是什麼? – Resh32

0

您已聲明itemName等作爲您的數據源方法不可見的範圍內的局部變量。您需要將它們保存爲視圖控制器的實例變量。

+0

嘿謝謝,這是如此愚蠢..但反正什麼是我應該返回numberofrows ?? – BoredToDeath

0

可以使用代碼:

NSString *itemname, *qua, *total; 

內部功能:

sqlite3_stmt  *statement; 
const char *dbpath = [databasePath UTF8String]; 

if (sqlite3_open(dbpath, & database) == SQLITE_OK) { 
    NSString *querySQL = [NSString stringWithFormat: @"SELECT * FROM FINALORDER"]; 
    const char *query_stmt = [querySQL UTF8String]; 

    if (sqlite3_prepare_v2(database, query_stmt, -1, &statement, NULL) == SQLITE_OK) { 

     while (sqlite3_step(statement) == SQLITE_ROW) { 

      itemname = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)]autorelease]; 
      qua = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)]autorelease]; 
      total = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 3)]autorelease]; 
     } 
    } 
sqlite3_finalize(statement); 
} 
sqlite3_close(database); 
[tblView reloadData]; 
+0

是tblview一個uitableview對象? – BoredToDeath

+0

我應該用什麼作爲變量來計算行數? – BoredToDeath

+0

是的。它會重新加載或刷新數據後從數據庫中獲取。 –

0

對於這一點,你必須採取一個數組。然後在while循環中添加代碼 例如。

listOfItems = [[NSMutableArray alloc] init]; 
[listOfItems addObject:itemname]; 

然後,方法:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
return [listOfItems count]; } 
0
Please Try This one it might be help you 

    +(NSMutableArray*)getData 
    { 
     NSString *strDestPath = [NSString stringWithFormat:@"%@/Documents/DBEmployee.sqlite",NSHomeDirectory()]; 
     sqlite3 *db; 
     NSMutableArray *empArr = [[NSMutableArray alloc]init]; 
     if(sqlite3_open([strDestPath UTF8String] , &db) == SQLITE_OK) 
     { 
      NSString *query = @"SELECT * FROM Employee"; 
      char* err_msg; 
      sqlite3_stmt* statement; 
      if(sqlite3_prepare_v2(db, [query UTF8String], -1,&statement, &err_msg) == SQLITE_OK) 
      { 
       while (sqlite3_step(statement) == SQLITE_ROW) { 
        DatabaseKeys *emp = [[DatabaseKeys alloc]init]; 
        emp.Eno = sqlite3_column_int(statement, 0); 
        NSString *strn = [NSString stringWithFormat:@"%d",emp.Eno]; 
        [empArr addObject:strn]; 


       } 
      } 
     } 
     return empArr; 
    }