我使用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」。經過兩個小時的失敗和這個問題的公開,我終於想:「那麼,爲什麼不使用乾淨的?它不會工作,但給它一個機會......」顯然,它的工作.. 。-_-' 由於某種原因,該項目只需要一個乾淨的...謝謝你的幫助,反正!
正如我由於某種原因,更新只說了一個清潔所需的項目...
當然調用準備兩個時間是不是一個好主意。很抱歉,我發佈的代碼很髒,僅用於測試。 很高興知道開放可能有權限問題,我會檢查這個! 非常感謝您的幫助!
在一個點上,你說「(Person.sqlite)」,但你在代碼中使用「Persone」。你的名字一致嗎?此外,這是什麼運行(Mac,iOS設備,iOS模擬器)? – 2012-04-24 13:11:08
您正在調用兩次準備(一次在您的日誌記錄中,一次爲*真實*);你認爲這是一個好主意嗎?另外Xcode是一個IDE - 你可能想要標記操作系統而不是你用來編寫代碼的工具。 – trojanfoe 2012-04-24 13:43:34