4

IDのコレクション(sqlite Android)と、保持したいIDのコレクションを含むテーブルがあります。

次に、toRetain = [1,2,3,4]の場合、実行を作成します。

DELETE FROM my_items WHERE _id NOT IN (1,2,3,4);

ただし、保持する項目の長さが非常に長い場合、SQLエンジンは「SQL変数が多すぎます」という例外をスローします。条項がINにないので、小さなステップでそれを行うことはできません。

どうすれば解決できますか?

私が考える1つの解決策は、すべてのIDを一時テーブルに挿入してから、次のことを実行することです。

DELETE FROM my_items WHERE _id NOT IN (SELECT_id FROM items_to_delete);

その解決策は正しく効率的ですか?

4

2 に答える 2

1

クエリで値をハードコーディングすると、Androidはそれを好まないので、試してみてください

db.delete("my_items", "_id NOT IN (?, ?, ?, ?)", String[] {"1", "2", "3", "4"});

または、ContentProvider を使用する場合:

getContentResolver().delete("content://uri/to/my/items", "_id NOT IN (?, ?, ?, ?)", String[] {"1", "2", "3", "4"})
于 2012-09-06T09:11:45.213 に答える