1

したがって、一連のオブジェクト全体を DB から削除したいと考えています。

それらは一時的に 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 に答える