使用NSMutableArray从db中删除记录

时间:2012-05-08 09:11:54

标签: objective-c sqlite nsmutablearray

所以我想从我的数据库中删除一系列对象。

它们暂时存储在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

1 个答案:

答案 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语句,然后按照您在代码段中的操作继续。

相关问题