我的sqlite查询(更新)看起来不适用于iOS

时间:2014-08-06 14:42:40

标签: ios objective-c sqlite

我想立即更新sqlite表中的一条记录。

travellName:self.savedName - > self.editedName

货币:self.savedCurrency - > self.editedCurrency

评分:self.savedRate - > self.editedRate

startBudget:self.savedBudget - > self.editedBudget

leftAssets:self.savedLeftAssets - > self.editedLeftAssets

在这里输入代码

NSString *qsql = [NSString stringWithFormat:@"UPDATE Travell SET travellName = 
'%@' and currency = '%@' and changeRate = '%@' and startBudget = '%@' and 
leftBudget = '%@' WHERE travellName = '%@' and currency = '%@' and changeRate =
'%@' and startBudget ='%@' and leftBudget = '%@'", self.editedName,   
self.editedCurrency, self.editedRate,self.editedBudget, self.editedLeftAssets, 
self.savedName, self.savedCurrency, self.savedRate, self.savedBudget, 
self.savedLeftAssets];

if(sqlite3_exec(db, [qsql UTF8String], NULL, NULL, &err) != SQLITE_OK){
        sqlite3_close(db);
        NSLog(@"Failed to update leftBudget");
}
else{
        NSLog(@"Success to update leftBudget");
}

这是我的代码。我有很多字段可以立即更新。查询是否有任何错误?

我检查了变量的所有值,没有问题。 很奇怪,sqlite3_exec(...)返回SQLITE_OK和NSLog(@"成功更新leftBudget")被执行。但问题是更新表没有正确执行.. 我不知道程序说SQLITE_OK但是表格没有正确更新..

1 个答案:

答案 0 :(得分:1)

在UPDATE语句中,要设置的多个列必须用AND分隔,而不能用逗号分隔。

SET travellName = '...' and currency = '...' and ...被解释为将单列travellName设置为表达式'...' and currency = '...' and ...的值,其中AND是布尔运算符;该表达式的最终值为0或1。

(当旅行名称包含引号时,这会爆炸。您应该使用sqlite3_mprintf正确格式化字符串。)