所以我想从我的数据库中删除一系列对象。
它们暂时存储在NSMutableArray中。
这是我当前的代码,我循环遍历它们。
+(BOOL) removeLogs:(Logs *)logs {
Database *db = [DatabaseManager sharedDatabaseManager].db;
sqlite3_exec(db.dataBase, "BEGIN", 0, 0, 0);
const char *sqlRemoveLogs = "DELETE FROM logs WHERE LogID = ?";
if(sqlite3_prepare_v2(db.dataBase, sqlRemoveLogs, -1, &removeLogStatement, NULL) != SQLITE_OK) {
NSLog(@"Failed to prepare statement: %s", sqlite3_errmsg(db.dataBase));
return NO;
}
for(int i = 0; i < logs.getLogs.count; i++) {
sqlite3_bind_int(removeLogStatement, 1, [logs getLogAtIndex:i].logId);
if(SQLITE_DONE != sqlite3_step(removeLogStatement)) {
NSLog(@"Failed to remove logs: %s", sqlite3_errmsg(db.dataBase));
return NO;
}
sqlite3_clear_bindings(removeLogStatement);
sqlite3_reset(removeLogStatement);
}
sqlite3_finalize(removeLogStatement);
NSLog(@"Logs removed");
return YES;
}
我希望以我现在必须使用for循环迭代它们的形式得到它。 使用以下语句为sqlite:
DELETE FROM logs WHERE LogID IN ?
如何填写这个'?'使用NSMutableArray? 甚至可以这样做吗?
非常感谢提前
编辑: “Logs”对象是一个NSMutableArray
答案 0 :(得分:1)
制作一个NSArray
您要删除的logIds
并将其保存在logIdsToDeleteArray
。
然后按照以下步骤操作;
第1步:
NSString * logIdsToDelete = [[logIdsToDeleteArray valueForKey:@"description"] componentsJoinedByString:@","];
结果:数组元素组合成一串逗号分隔的元素。
第2步:
NSString *logIdsToDelete = [NSString stringWithFormat:@"{%@}", logIdsToDelete];
结果:{element1,element2,element 3 ..}为NSString
第3步:
NSString *s = [NSString stringWithFormat:@"DELETE FROM logs WHERE LogID IN %@", logIdsToDelete];
结果:所需的sql语句为NSString
第4步:
const char *sql = [s cStringUsingEncoding:NSASCIIStringEncoding];
结果:sqlite3兼容const char
您将获得要执行的sql语句,然后按照您在代码段中的操作继续。