我正在做一个从Web服务获取JSON数据并在SQLite数据库中更新它的应用程序。我的问题是我从Web服务获得了值,但在上传时显示'null'。它没有得到更新。
我的代码: -
-(void) updateSignupTable: (NSDictionary*) json {
//copying the values from web services
NSString *balance = [json objectForKey:@"balance"];
NSString *phone_number =[json objectForKey:@"sim_number"];
NSString *call_forward_Status = [json objectForKey:@"call_forward_status"];
//将其存储在数据库中
sqlExecutObj.sql=[NSString stringWithFormat:@"UPDATE profile_table SET phone_number ='%@' balance = '%@' call_forward_status = '%@' WHERE profile_name= '%@'", phone_number ,balance, call_forward_Status, profileDetailTitle];
sqlExecutObj.dataTypeArray=[[NSMutableArray alloc]initWithObjects:@"1",@"1",@"1",nil];
[sqlExecutObj executeSelectQuery];
///reloading the table
[profileDetailView.detailsTableView reloadData];
// fetch and print the updated datas from SQLite
sqlExecutObj.sql=[NSString stringWithFormat:@"SELECT call_forward_status,phone_number,balance FROM profile_table WHERE profile_name= '%@'",selectedProfileName];
sqlExecutObj.dataTypeArray=[[NSMutableArray alloc]initWithObjects:@"1",@"1",@"1",nil];
[sqlExecutObj executeSelectQuery];
NSLog(@"result from table are: %@. and %@, and %@", [[sqlExecutObj.result objectAtIndex:0] objectAtIndex:0],[[sqlExecutObj.result objectAtIndex:1] objectAtIndex:0],[[sqlExecutObj.result objectAtIndex:2]objectAtIndex:0] );
}
我的调试输出: -
2013-05-14 15:54:02.910 Movirtu[44262:19d03] result from table are: (null). and (null), and (null)
答案 0 :(得分:0)
要谨慎,请注意以下几行:
sqlExecutObj.sql=[NSString stringWithFormat:@"UPDATE profile_table SET phone_number ='%@' balance = '%@' call_forward_status = '%@' WHERE profile_name= '%@'", phone_number ,balance, call_forward_Status, profileDetailTitle];
将profileDetailTitle指定为profile_name,但是第二个语句指定您从数据库中读取数据:
sqlExecutObj.sql=[NSString stringWithFormat:@"SELECT call_forward_status,phone_number,balance FROM profile_table WHERE profile_name= '%@'",selectedProfileName];
指定profile_name是'selectedProfileName'。
在您的代码中,profileDetailTitle或selectedProfileName是什么并不明显。也许为了调试,您可以将它们设置为相同的值。
另外,为了确保,如果profileDetailTitle或selectedProfileName是用户驱动的,或者只是包含非字母数字字符,您应该(绑定),健全性检查,转义这些值。对于输入到数据库中的任何其他值也是如此 - 但这不是范围; - )