2014-10-28 78 views
1

我有一個問題,當我選擇用戶名返回只有一個對象和表包含所有用戶名如何解決這個我嘗試通過數據庫管理器選擇,我發現該查詢SQL statment是正確在表sqlite中選擇數據記錄只有一個對象返回

- (NSMutableArray*) FindAccounts 
    { 
    ///database 
    NSString *docsDir; 
    NSArray *dirPaths; 
    // Get the documents directory 
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    docsDir = [dirPaths objectAtIndex:0]; 
    // Build the path to the database file 
    databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"TRIAL.sqlite"]]; 
    NSFileManager *filemgr = [NSFileManager defaultManager]; 
    sqlite3_stmt *statement; 
    const char *dbpath = [databasePath UTF8String]; 
    if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK) 
    { 
    NSString *querySQL = [NSString stringWithFormat:@"SELECT USERNAME,TYPE FROM CONTNEW"]; 
    const char *query_stmt = [querySQL UTF8String]; 
    NSMutableArray *resultArray = [[NSMutableArray alloc]init]; 
    if (sqlite3_prepare_v2(contactDB,query_stmt, -1, &statement, NULL) == SQLITE_OK) 
    { 
    if (sqlite3_step(statement) == SQLITE_ROW) 
    { 
    NSString *USERS = [[NSString alloc] initWithUTF8String:(const char *)  sqlite3_column_text(statement, 0)]; 
    [resultArray addObject:USERS]; 
    return resultArray; 
    } 
    else{ 
    NSLog(@"Not found"); 
    return nil; 
    } 
    sqlite3_reset(statement); 
    } 
    } 
    return nil; 
    } 
+0

爲什麼?因爲你沒有循環。 – trojanfoe 2014-10-28 10:02:33

+0

我該如何爲此做循環?謝謝 – 2014-10-28 10:03:09

+0

使用'while'語句而不是'if'語句。除去那些早期的'return'語句以及你有資源泄漏(提示:關閉數據庫)。 – trojanfoe 2014-10-28 10:04:20

回答

1

OK,試試這個(注意,沒有太多的錯誤報告):

- (NSMutableArray*) FindAccounts 
{ 
    NSString *docsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *databasePath = [docsDir stringByAppendingPathComponent:@"TRIAL.sqlite"]; 
    sqlite3_stmt *statement; 
    // I assume contactDB is an instance variable? 
    if (!contactDB && 
     sqlite3_open([databasePath UTF8String], &contactDB) != SQLITE_OK) { 
     NSLog(@"Failed to open database"); 
     return nil; 
    } 

    NSString *querySQL = @"SELECT USERNAME,TYPE FROM CONTNEW ORDER BY USERNAME"; 
    NSMutableArray *resultArray = [NSMutableArray new]; 
    if (sqlite3_prepare_v2(contactDB, [querySQL UTF8String], -1, &statement, NULL) == SQLITE_OK) 
    { 
     while (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      NSString *username = @(sqlite3_column_text(statement, 0)); 
      [resultArray addObject:username]; 
     } 
     sqlite3_reset(statement); 
    } 
    return resultArray; 
} 
+0

我解決了,謝謝 – 2014-10-28 10:28:16

+2

你解決了嗎,或者我解決了嗎? – trojanfoe 2014-10-28 10:29:21

相關問題