2012-11-14 75 views
0

我在一個表格中存儲了一個包含多個不同類型列的值集合,並且當我在iPhone模擬器上運行該應用程序時插入和選擇工作正常。但是,在真實設備上運行並選擇數據時,它看起來似乎無法獲取表格的某些文本列(其餘列似乎被正確檢索)。在哪裏我應該顯示一個字符串對話框,我不是,我得到一個空的對話框,而與字符串對話框正確地顯示在模擬器上。SQLite3的選擇在模擬器上,但它不在設備上

這是插入的代碼片段:

if(sqlite3_prepare_v2(database, sqlStatement, 
          -1, &compiledStatement, NULL) == SQLITE_OK) 
    { 
     sqlite3_bind_int(compiledStatement, 1, userData.ID); 
     sqlite3_bind_double(compiledStatement, 2, userData.Location.Lat); 
     sqlite3_bind_double(compiledStatement, 3, userData.Location.Lon); 
     sqlite3_bind_text(compiledStatement, 4, [userData.Name UTF8String], -1, SQLITE_TRANSIENT); 
     sqlite3_bind_text(compiledStatement, 5, [userData.Surname UTF8String], -1, SQLITE_TRANSIENT); 
    } 

    if(sqlite3_step(compiledStatement) == SQLITE_DONE) { 
     sqlite3_finalize(compiledStatement); 
    } 
    else { 
     NSLog(@"%d",sqlite3_step(compiledStatement)); 
    } 
} 
sqlite3_close(database); 

這是選擇:

if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 
     while(sqlite3_step(compiledStatement) == SQLITE_ROW) { 
      UserData *userData = [[UserData alloc] init]; 

      userData.ID = sqlite3_column_int(compiledStatement, 0); 

      char *name = sqlite3_column_text(compiledStatement, 1); 
      if (name == nil) 
       userData.Name = @""; 
      else 
       userData.Name = [NSString stringWithUTF8String: name]; 

      [list addObject:userData]; 
     } 
    } 
    sqlite3_finalize(compiledStatement); 
} 
sqlite3_close(database); 

我完全不知道爲什麼數據庫的數據管理在模擬器表現好(我有SQLite管理器插件和數據被正確存儲和檢索),但它不在真正的iPhone中。我如何檢查設備上發生了什麼?有人經歷過類似的事嗎?

謝謝!

+0

顯示你的SQL請求 – Oleg

+0

那的代碼片斷第二有兩個開放的大括號「{」和三貼近「}」,所以我不知道這是怎麼回事連接。無論如何,這裏是我的代碼片段,工作正常。 char * localityChars =(char *)sqlite3_column_text(statement,1); if(localityChars == NULL)返回FALSE; ,至於綁定文本,你做它不同於我的應用程序這樣做:sqlite3_bind_text(stmt,4,[myString UTF8String],-1,NULL); – Chris

回答

0

我終於得到了它的工作,下面所有的建議,我覺得有什麼解決的最後的問題是區分大小寫的事情。感謝ü所有

+0

我很高興聽到我說得對,我正在等待投票..甚至:) – TonyMkenu

0

我認爲這個問題可能是由空記錄引起你的if nil沒有幫助,嘗試NULL代替:

if ((char *)sqlite3_column_text(compiledStatement, 1) == NULL) 
userData.Name = @""; 
+1

奇怪,怪異..嘗試刪除/重新安裝設備中的應用程序,再次檢查表名稱和字段名稱(在設備上區分大小寫)。讓我們知道..進展。祝你好運! – TonyMkenu

相關問題