2013-06-03 68 views
-1

我有一個項目,並在其中創建sqlite數據庫。現在我想從Sqlite中讀取數據並存儲在NSMutableArray中,並在UITableView中顯示這​​是我的代碼,但是當我一步步地編譯這個程序時。從該行這種編譯跳:爲什麼不工作我的數據庫SQLite xcode

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

這一行,不工作:

sqlite3_close(database1); 

這是我的完整代碼:

/*================================================================== 
METHOD FOR READING DATA FROM DATABASE 
==================================================================*/ 
-(NSMutableArray *)readInformationFromDatabase 
{ 
    array = [[NSMutableArray alloc] init]; 
    // Setup the database object 
    sqlite3 *database2; 
    // Open the database from the users filessytem 
    if(sqlite3_open([[self DatabaseSqlite] UTF8String], &database2) == SQLITE_OK) 
    { 
     // Setup the SQL Statement and compile it for faster access 
     //SQLIte Statement 
     NSString *sqlStatement =[NSString stringWithFormat:@"Select ID from Table1 where ParentID = 0"]; 
     sqlite3_stmt *compiledStatement2; 
     if(sqlite3_prepare_v2(database2, [sqlStatement UTF8String], -1, &compiledStatement2, NULL) == SQLITE_OK) 
     { 
      // Loop through the results and add them to the feeds array 
      while(sqlite3_step(compiledStatement2) == SQLITE_ROW) 
      { 
       // Init the Data Dictionary 
       _OwnID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement2, 0)]; 
      } 
     } 
     else 
     { 
      NSLog(@"No Data Found"); 
     } 
     // Release the compiled statement from memory 
     sqlite3_finalize(compiledStatement2); 
    } 
    sqlite3_close(database2); 

    ThisParentID = _OwnID; 
    do { 
     // Setup the database object 
     sqlite3 *database1; 
     // Open the database from the users filessytem 
     if(sqlite3_open([[self DatabaseSqlite] UTF8String], &database1) == SQLITE_OK) 
     { 
      // Setup the SQL Statement and compile it for faster access 
      //SQLIte Statement 
      NSString *sqlStatement_userInfo =[NSString stringWithFormat:@"Select * from Table1 ParentID = %@",ThisParentID]; 
      sqlite3_stmt *compiledStatement; 
      if(sqlite3_prepare_v2(database1, [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 *_recordName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)]; 
        NSString *_recordID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)]; 
        NSString *_recordParentID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]; 
        _recordBrotherID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)]; 
        NSString *_recordChildID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 4)]; 
        NSString *_recordType = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 5)]; 
        NSString *_recordModified = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 6)]; 

        ThisParentID = _recordID; 

        [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordName] forKey:@"Name"]; 
        [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordID] forKey:@"ID"]; 
        [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordParentID] forKey:@"ParentID"]; 
        [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordBrotherID] forKey:@"BrotherID"]; 
        [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordChildID] forKey:@"ChildID"]; 
        [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordType] forKey:@"Type"]; 
        [_dataDictionary setObject:[NSString stringWithFormat:@"%@",_recordModified] forKey:@"Modified"]; 

        [array addObject:_dataDictionary]; 
       } 
      // Release the compiled statement from memory 
      sqlite3_finalize(compiledStatement); 
     } 
     sqlite3_close(database1); 
     } 
     else 
     { 
      NSLog(@"NOT Found"); 
     } 
    } while (![_recordBrotherID isEqualToString:@"0"]); 

    return array; 
} 
+0

sqlite3_prepare_v2的返回值是什麼? –

回答

1

我的朋友在寫多行代碼時要小心。這個代碼是正確的,但在這段代碼有一點點錯誤,這個錯誤是在這一行:

NSString *sqlStatement_userInfo =[NSString stringWithFormat:@"Select * from Table1 ParentID = %@",ThisParentID]; 

與某些列,你應該使用此代碼從SQlite的讀取數據:

「選擇*從表名WHERE柱= someValue中」

所以你應該改變你的代碼,這樣寫:

NSString *sqlStatement_userInfo =[NSString stringWithFormat:@"Select * from Table1 Where ParentID = %@",ThisParentID]; 

我希望這可以幫助你。

相關問題