赞
踩
在编程过程中很多时候需要拼接字符串。在使用FMDB管理sqlite数据库,手写的SQL语句总是要拼接字符串。
各种语言有不同的字符串拼接方式,java 、c++等语言字符串拼接最为简单,直接使用“+”就搞定了。例如"select * from " + tablename + "where id=" + id 但是使用OC恶心的语法写出的代码也非常恶心。下面总结下
方法一、使用 stringWithFormat 格式化字符串
NSString*sql = [NSString stringWithFormat:"select * from %@ where id='%@'",tablename,id];
NSString*sql = [[[[@"select * from " stringByAppendingString:tablename] stringByAppendingString:@"where id='"]stringByAppendingString:id]stringByAppendingString:@"'"];
或者
- NSString*sql = [@"select * from " stringByAppendingString:tablename];
- sql = [sql stringByAppendingString:@"where id='"];
- sql = [sql stringByAppendingString:id];
- sql = [sql stringByAppendingString:@"'"];
这个是把方法一和方法二结合结合起来的一个方法。
一直想找个好的方法,既直观又方便。
甚至还想到用宏。
- #define _SQL(x) #x
- #define SQL(x) _SQL(x)
最后想到使用不定长参数来拼接字符串,将上面的方法封装起来。
方法四、+ (NSString*)NStr:(NSString*) str,...
- // 拼接字符串
- + (NSString*)NStr:(NSString*) str,...
- {
- if (!str) {
- return nil;
- }
- NSMutableString *ret = [NSMutableString stringWithFormat:@"%@",str];
- id obj = nil;
- va_list args;
- va_start(args, str);
-
- while ((obj = va_arg(args, id))) {
- if ([obj isKindOfClass:[NSString class]]) {
- [ret appendString:obj];
- } else {
- NSLog(@"<NStr>:WARNING %@ is not a NSString", [obj class]);
- }
- }
- va_end(args);
- return ret;
- }
- // 使用
- [类名 NStr:@"select * from ",tableName,@" where id='",id,@"'",nil];
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。