2012-06-30 64 views
1

我使用的是火狐sqlite管理器來幫助我構建一個iPhone應用程序。我在其中包含一個UPDATE查詢,它在iPhone模擬器中完美工作。但是,當我從真實機器(iPhone)運行時失敗。沒有錯誤,它只是不更新​​數據庫。更新查詢只適用於模擬器

我想到的兩個可能的原因: 1)它更新的數據庫不是一個在模擬器 2)我讀db是不是更新

有沒有人有類似經歷的人嗎?

代碼如下:

 NSFileManager *fileMgr = [NSFileManager defaultManager]; 
     NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"Exercises.sqlite"]; 

     BOOL success = [fileMgr fileExistsAtPath:dbPath]; 
     if(!success) 
     { 
      NSLog(@"Cannot locate database file '%@'.", dbPath); 
     } 
     if(!(sqlite3_open([dbPath UTF8String], &db) == SQLITE_OK)) 
     { 
      NSLog(@"An error has occured."); 
     } 

     NSString *ranID = [@"UPDATE Status SET money = " stringByAppendingFormat:@"%d", money + 100]; 

     const char *sql2 = [ranID UTF8String]; 
     sqlite3_stmt *sqlStatement2; 
     if(sqlite3_prepare(db, sql2, -1, &sqlStatement2, NULL) != SQLITE_OK) 
     { 
      NSLog(@"Problem with prepare statement 2"); 
     } 
     if (sqlite3_step(sqlStatement2)==SQLITE_ROW) 
      NSLog(@"succeed"); 

在此先感謝。

回答

0

發生什麼情況是您正嘗試在您的軟件包中的數據庫中寫入數據,您沒有對數據包中文件的寫入訪問權限,如果要更新數據庫,則需要將其複製到Documents目錄中

要複製數據庫文件

NSString *documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Exercises.sqlite"]; 

[[NSFileManager defaultManager] copyItemAtPath:dbPath toPath:documentsPath error:NULL]; 

然後始終使用新的文件路徑(documentsPath)來訪問數據庫中的應用程序的包

+0

感謝您的快速響應。 Documents dir的含義是什麼以及如何複製數據庫? – xcoder

+0

@xcoder檢查更新回答 –

+0

它工作的很棒!非常感謝你的幫助!! – xcoder

0

文件是隻讀的設備上。

您應該先將它複製到應用程序沙箱中的某個位置,例如您的庫/應用程序支持目錄中。 (您可以在NSApplicationSupportDirectory中使用 - [NSFileManager URLsForDirectory:inDomains:]來查找此路徑;確保在嘗試寫入該目錄之前創建目錄。)

0

這聽起來像您沒有提交我們的更改。看到類似的帖子herehere