2012-03-30 13 views
0

我有一個SQLite數據庫在這個位置SQLite和OBJ-C DB清楚何時啓動應用程序

/Users/software/Library/Application Support/iPhone Simulator/5.0/Applications/723EEE91-CB9D-4A27-8492-D61E127E72B7/myAPP.app/localDB.sqlite 

上寫沒有問題,刪除或讀取數據。 例如,如果我在數據庫和關閉應用程序上編寫數據,我會在數據庫中找到數據,但是如果我重新啓動應用程序,我的數據庫將清除。有人能告訴我爲什麼嗎?

這是一個數據庫實例

SQLiteUtilities *db = [[SQLiteUtilities alloc]init:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"localDB.sqlite"]]; 

[db loadValuesFromQuery:@"SELECT * FROM categories;"]; 
for (int i = 0; i < [db getSize]; i++) { 
    NSLog(@"-- %@", [db objectAtIndex:i]); 
} 
[db release]; 

-(void)loadValuesFromQuery:(NSString *)query { 

GenericRecord *record = [[[GenericRecord alloc]init] autorelease]; 

if (sqlite3_open([pathDB UTF8String], &database) == SQLITE_OK) { 
    // query che ricava i valori 
    const char *sql = (const char *) [query UTF8String]; 
    sqlite3_stmt *selectstmt; 

    if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) { 

     while(sqlite3_step(selectstmt) == SQLITE_ROW) { 
      // ricaviamo i valori letti dalla query 
      record.uniqueID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)]; 
      record.superID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)]; 
      record.subSuperID = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 3)]; 
      record.title = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 4)]; 
      record.description = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 5)]; 
      record.price = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 6)]; 
      record.note = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 7)]; 
      record.pictureURL = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 8)]; 
      record.catName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 9)]; 
      record.subCatName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 10)]; 

      NSData *data = [[NSData alloc] initWithBytes:sqlite3_column_blob(selectstmt, 11) length:sqlite3_column_bytes(selectstmt, 11)]; 
      if(data) record.imageBig = [UIImage imageWithData:data]; 

      [self.list addObject:record]; 

     } 
    } 
} 
sqlite3_close(database); 

}

+0

嘗試[此] [1] [1]:http://stackoverflow.com/questions/9887785/sqlite-database-load-fails-issue-with-sqlite-prepare-statement- iphone-xcod/9888240#9888240 – WaaleedKhan 2012-03-30 12:55:00

+0

應用程序在這裏失敗,在nsassert if(成功){ NSString * defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@「localDB.sqlite」]; 成功= [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];如果(!success) NSAssert1(0,@「無法創建帶有消息'%@'的可寫數據庫文件'」,[error localizedDescription]); } – user1303255 2012-03-30 13:19:49

+0

夥計你的應用程序沒有從取景器獲取數據庫....檢查我的答案在上面的鏈接,並嘗試的步驟,希望它會工作 – WaaleedKhan 2012-03-30 13:22:51

回答

0

也很好奇,爲什麼我看到這麼多的原料sqlite3的工作,這些天的一個例子 - 你不使用核心數據的原因嗎?只是一個建議 - 它可能不適合你的需求(即架構已經存在,你直接下載,等等)。

相關問題