得到错误更新sqlite

时间:2014-12-04 04:45:26

标签: ios iphone sqlite ios8

我正在做项目,我在数据库路径中构建。我正在使用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

2 个答案:

答案 0 :(得分:0)

分两步完成。

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

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

答案 1 :(得分: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];