2014-12-04 53 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