我试图在数据库中插入记录,每当我这样做时,它会在数据库中插入两次记录。 我使用以下查询来执行我的插入:
-(void) insert {
NSString *sqlQuery = [NSString stringWithFormat:@"INSERT OR REPLACE INTO test(ID,KEY ) VALUES ('%d','%@');", test.id, test.key];
const char *insert_sql = [sqlQuery UTF8String];
sqlite3_exec(db, insert_sql, NULL, NULL, NULL);
}
每次运行此查询时,它始终会输入重复的记录。有没有办法检查数据是否已经存在,然后不要插入只是更新。
答案 0 :(得分:3)
您正在使用stringWithFormat:
初始化SQL字符串,但您传递的字符串不是格式字符串。 ?
参数只能由sqlite解析器识别。
您可以通过用
替换SQL字符串来解决此问题// Assuming id is an int and key is a string
NSString *sqlQuery = [NSString stringWithFormat:@"INSERT OR REPLACE INTO test(ID,KEY ) VALUES (%d,%@);", test.id, test.key];
或者您需要调用sqlite prepare / bind函数将参数绑定到通配符。为此,请参阅prepare和bind文档。
我建议采用第二种方法,因为这会阻止SQL注入。
答案 1 :(得分:1)
ID是表的主键还是其他索引?它必须是唯一的替代品才能发生。