2012-04-24 27 views
-1

我使用SqlManager在sqlite中創建了一個簡單的數據庫,然後我在我的資源中複製了一個簡單的xcode項目中的文件(Person.sqlite),並使用此代碼訪問數據庫,但數據庫似乎不加載。 init中的函數sqlite3_open返回0(all ok),而getAllPersons中的sqlite3_prepare返回在數據庫中找不到數據庫中的表「Persona」,所以我相信問題是我無法得到真正的數據庫。可能是開放的,沒有找到數據庫,創建一個新的空的......爲什麼會發生這種情況?我給出db路徑的方式不正確? ([[NSBundle mainBundle] pathForResource:@「Persone」ofType:@「sqlite」];)實際上,定義路徑的變量(sqLiteDb)上的nslog返回null,但我嘗試了其他幾種方法來調用此路徑,但都是錯誤的...無法在xcode中加載sqlite數據庫

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     NSString *sqlLiteDb = [[NSBundle mainBundle] pathForResource:@"Persone" ofType:@"sqlite"]; 
     NSLog(@"Path db: %@",sqlLiteDb); 
     if(sqlite3_open([sqlLiteDb UTF8String], &database) != SQLITE_OK){ 
      NSLog(@"Failed to open database"); 
     }else { 
      NSLog(@"Database opened"); 
     } 
    } 

    return self; 
} 

- (NSArray *) getAllPersons{ 
    NSMutableArray *returnArray=[[NSMutableArray alloc] init]; 
    NSString *query= @"SELECT Nome FROM Persona";  
    sqlite3_stmt *statement; 
    NSLog(@"%d", sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL)); 
    printf("could not prepare statemnt: %s\n", sqlite3_errmsg(database)); 


    if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK){ 
     NSLog(@"kndvnspò"); 
     while (sqlite3_step(statement)==SQLITE_ROW) { 
      int uniqueId = sqlite3_column_int(statement, 0); 
      char *nomeChar =(char *) sqlite3_column_text(statement, 1); 
      char *cognomeChar =(char *) sqlite3_column_text(statement, 2); 
      NSString *nome= [[NSString alloc] initWithUTF8String:nomeChar]; 
      NSString *cognome= [[NSString alloc] initWithUTF8String:cognomeChar]; 

      PersonInfo *info= [[PersonInfo alloc] initWithUniqueId:uniqueId nome:nome cognome:cognome]; 
      [returnArray addObject:info]; 
     } 
     sqlite3_finalize(statement); 
    } 
    return returnArray; 

} 

對不起,我相信該解決方案很容易,但我還沒有在Xcode那麼喜歡^^謝謝!

更新:不,它一直是「Persone」。經過兩個小時的失敗和這個問題的公開,我終於想:「那麼,爲什麼不使用乾淨的?它不會工作,但給它一個機會......」顯然,它的工作.. 。-_-' 由於某種原因,該項目只需要一個乾淨的...謝謝你的幫助,反正!


正如我由於某種原因,更新只說了一個清潔所需的項目...

當然調用準備兩個時間是不是一個好主意。很抱歉,我發佈的代碼很髒,僅用於測試。 很高興知道開放可能有權限問題,我會檢查這個! 非常感謝您的幫助!

+0

在一個點上,你說「(Person.sqlite)」,但你在代碼中使用「Persone」。你的名字一致嗎?此外,這是什麼運行(Mac,iOS設備,iOS模擬器)? – 2012-04-24 13:11:08

+0

您正在調用兩次準備(一次在您的日誌記錄中,一次爲*真實*);你認爲這是一個好主意嗎?另外Xcode是一個IDE - 你可能想要標記操作系統而不是你用來編寫代碼的工具。 – trojanfoe 2012-04-24 13:43:34

回答

0

源碼經常失敗,權限的數據庫文件和整個directori文件的打開becaise放入。

相關問題