我正在做项目,我在数据库路径中构建。我正在使用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_ID
为VARCHAR TYPE
答案 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];