25

複数の条件を満たす行を削除したい。

たとえば、ID のリストを渡し、これらを含むすべての行を削除したいとしますIDs(ID は一意です)。

これは:

String[] ids = {"0", "1", "2", "3",...};
database.delete("rows" , "id=? OR id=? OR id=? OR id=? OR ..." , ids );

複数なしでコンパクトにする方法はありますORか?

4

7 に答える 7

62

db.execSQLメソッドと SQL のINキーワードを使用して実行できます。例えば:

String args = TextUtils.join(", ", ids);

db.execSQL(String.format("DELETE FROM rows WHERE ids IN (%s);", args));
于 2013-01-16T12:04:20.687 に答える
18

使用したいのは、IN(4 つの ID を持つ); のような句です。

database.delete("rows", "id IN (?, ?, ?, ?)", ids );

要求に応じて、これは (一例として) 動的に行う方法です。

database.delete("rows", 
    "id IN (" + new String(new char[ids.length-1]).replace("\0", "?,") + "?)", 
    ids);
于 2013-01-16T12:05:26.720 に答える
7

Android の公式ドキュメントでは、 execSQLの使用はレコードを削除する適切な方法ではないことが示されています。

次の簡単な方法を提案したいと思います。提供されdelete()た API を使用します。

String[] idArray = new String[] {"1", "2", "3"};
String idsCSV = TextUtils.join(",", idArray);
SQLiteDatabase db = getWritableDatabase();
if (db != null) {
    db.delete("table_name", "id IN (" + idsCSV + ")", null);
    db.close();
}
于 2016-08-24T11:23:53.390 に答える
2

id IN (1, 2, 3, 4, ...)括弧内に配列値を使用して直接出力できます。

database.delete("rows", String.format("id IN (%s)", StringUtils.join(ids, ",")));

別の方法として、そのようなことのためにある種のflags列を使用しようとします(削除のために単一のエントリにフラグを付けることができるようなものがある場合; IDリストがどのように「構築」されているかわかりません)。

于 2013-01-16T12:05:22.370 に答える
1

私はこれを使用してこれを行いました:

Sqlite ステートメントの構文:

db.delete(TABLE_NAME,"COLUMN IN (?)", new String[]{commaSaparatedString})

質問に基づく例:

String args = TextUtils.join(", ", ids);
db.delete("rows","id IN (?)", new String[]{args})
于 2016-06-08T10:03:14.303 に答える