2009-11-04 24 views
0

我有一個SQLite數據庫,其中有19條記錄。這些記錄中有18個「threatLevel」值爲1,其中一個的「threatLevel」爲2.該字段默認設置爲1.我最近將第19條記錄更改爲「threatLevel」2以用於測試目的。 我使用SQLite Manager(Firefox擴展)將值直接添加到我的項目中的sqlite文件。我可以查詢表格並顯示第19條記錄的「threatLevel」爲2. 當我在模擬器中運行我的應用程序時,第19條記錄的「threatLevel」爲1.我嘗試清理我的構建,卸載應用程序,甚至從我的項目中刪除sqlite數據庫並讀取它。什麼都沒有SQLite的經理說,它有一個值2,但在程序運行時,它得到的1 代碼值將其加載到從DB類是這樣的:在iPhone模擬器上SQLite記錄不正確

primaryKey = pk; 
    database = db; 

    // Compile the query for retrieving City data. 
    if (init_statement == nil){ 
     const char *sql = "SELECT * FROM myTable WHERE id=?"; 
     if (sqlite3_prepare_v2(database, sql, -1, &init_statement, NULL) != SQLITE_OK){ 
      NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database)); 
     } 
    } 

    sqlite3_bind_int(init_statement, 1, primaryKey); 
    if (sqlite3_step(init_statement) == SQLITE_ROW){ 
       LOAD THE FIRST 12 FIELDS HERE 
     self.threat_level = sqlite3_column_int(init_statement, 13); 
    } else { 
     self.name = @"Nothing"; 
    } 

編輯 我試圖從項目中刪除sqlite數據庫,然後將其移動到我的桌面上進行備份。我仍然可以構建並運行我的應用程序。 所以它看着我的數據庫的舊版本,但Spotlight說我的機器上除了我的桌面上沒有其他版本。 這裏有什麼幫助嗎?

+0

爲什麼不使用核心數據? – bbum 2009-11-04 05:14:18

+0

爲什麼使用核心數據? (核心數據不是在框架的所有版本中) – 2009-11-04 05:40:39

+0

@Pselus你真的關注2.x設備嗎? – 2009-11-04 19:47:55

回答

0

當你需要提供參數作爲sqlite3_open()的一部分時,它應該很容易識別你使用的數據庫的名稱/路徑?

if (sqlite3_open([dataFilePath UTF8String], &database) == SQLITE_OK) { 

數據庫文件可能在模擬器中。模擬器中有一個選項可用於「重置內容和設置」。

+0

重置內容和設置爲我解決了這個問題。謝謝! – 2009-11-10 04:12:52

0

我想,而不是使用SELECT *您可能希望在選擇字符串使用明確的列名...

+0

爲什麼所有其他領域的工作正確呢? – 2009-11-04 05:41:47

+0

一般情況下,最好使用列名稱而不是'*',因爲如果表格中的列順序發生更改,將會破壞代碼。 – 2009-11-05 00:15:11

1

您可以使用lsof列出一個進程打開的文件,它可以希望能幫助你明確正在使用哪個數據庫。使用活動監視器或類似工具查找應用程序的進程ID,並在終端中運行lsof -p <PID>

0

你的sqlite在你的項目中的位置 - 例如。它是在您的應用程序包中,還是將它寫入您的應用程序的Documents文件夾?

如果您將其寫入文檔文件夾爲您的應用程序和運行文件將位於在iPhone模擬器

~/Library/Application Support/iPhone Simulator/User/Applications/<application id> 

而且該應用程序支持文件夾中的模擬器,我會添加+1一般情況下使用核心數據 - 我只參加了Apple iPhone事件,並且通過在大多數其他sqlite框架中使用Core Data獲得一些顯着的效率和性能優勢,特別是直接訪問sqlite c api。

相關問題