1

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

它们临时存储在 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?甚至有可能做到这一点吗?

提前谢谢了

编辑:“日志”对象是一个 NSMutableArray

4

1 回答 1

1

让您想要删除并保存NSArray在.logIdslogIdsToDeleteArray

然后按照以下步骤操作;

第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 语句,然后像您在代码片段中所做的那样继续。

于 2012-05-08T12:14:20.737 回答