2014-12-04 81 views
-2

我正在做項目,我在數據庫路徑結構。我正在使用sqlite數據庫進行存儲。在這我的問題是當我更新表顯示錯誤。對於數據庫部分,我使用預寫類。每當需要時我都會調用這個類的方法。看下面你可以理解。獲取錯誤更新sqlite

這下面的代碼工作正常

[DataCachingHelper updateTable:@"sendertable" data:dic3 where:@"MESSAGE_ID='1234'"]; 

,但是當我發送對象的「裏」,這顯示一些錯誤。

[DataCachingHelper updateTable:@"sendertable" data:dic3 where:@"MESSAGE_ID=%@",@"hai"]; 

我得到的錯誤:

"too many arguments to methods call expected 3,have 4". 

這裏MESSAGE_IDVARCHAR TYPE

+0

「MESSAGE_ID」的數據類型是什麼?當你發送'@「MESSAGE_ID ='1234''時會給出什麼錯誤? – 2014-12-04 04:53:27

+0

@Virussmca MESSAGE_ID是varchartype – 2014-12-04 05:11:59

回答

0

這個問題很明顯。您無法傳遞字符串格式,因爲在轉換爲字符串格式之前,編譯器會編譯參數。從你的方法聲明中允許的參數必須是3.

所以編譯器檢測4個參數是因爲你用字符串傳遞格式。

也在sqlite數據庫VARCHAR類型字段使用雙引號字段值。

所以你的字符串應該是這樣的:

NSString *whereClauseString = [NSString stringWithFormat:@"MESSAGE_ID = \"%@\"",@"hai"]; 

或者,如果值是預先已知簡單地創建的字符串是這樣的:

NSString *whereClauseString = @"MESSAGE_ID = \"hai\""; 

然後用這個字符串作爲第三個參數爲updateTable方法:

[DataCachingHelper updateTable:@"sendertable" data:dic3 where:whereClauseString]; 
+0

謝謝你的回答 – 2014-12-05 09:02:36

0

化妝這兩步。

NSString *strWhere=[NSString stringWithFormat:@"MESSAGE_ID='%@'",@"hai"]; 

    [DataCachingHelper updateTable:@"sendertable" data:dic3 where:strWhere]; 
+0

我也試過用單引號,但是我得到了同樣的錯誤 – 2014-12-04 05:10:59

+0

什麼是數據庫中的MESSAGE_ID類型int或字符串 – 2014-12-04 05:12:21

+0

MESSAGE_ID ID是VARCHAR TYPE – 2014-12-04 05:15:17