如何在SQLite中删除多行的参数?

我想删除满足多个条件的行。

例如,我传递了一个ID列表,并且想要删除所有具有这些IDs行(ID是唯一的)。

这将是:

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

有没有办法做到紧凑没有多个OR

Solutions Collecting From Web of "如何在SQLite中删除多行的参数?"

您可以通过db.execSQL方法和SQL的IN关键字来完成。 例如:

 String args = TextUtils.join(", ", ids); db.execSQL(String.format("DELETE FROM rows WHERE ids IN (%s);", args)); 

你想要使用的是一个IN子句,就像(有4个ID);

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

根据要求,这是(一个例子)如何dynamic地做到这一点。

 database.delete("rows", "id IN (" + new String(new char[ids.length-1]).replace("\0", "?,") + "?)", ids); 

Android的官方文档告诉这里 ,使用execSQL不是正确的方式来删除logging。

我想build议以下简单的方法。 使用提供的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(); } 

我已经这样做了:

Sqlite语句语法:

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

基于问题的示例:

 String args = TextUtils.join(", ", ids); db.delete("rows","id IN (?)", new String[]{args}) 

你可以使用id IN (1, 2, 3, 4, ...)并直接在括号内打印你的数组值:

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

作为替代scheme,我会尝试使用某种flags列来表示这样的事情(如果能够标记单个条目进行删除;我不知道您的ID列表是如何“构build”的)。

下面是一个用StringBuilder构build“?,?,?,…”占位符string的例子。 如果有很多参数,纯string连接会产生大量的垃圾,StringBuilder帮助。

 String[] ids = {"0", "1", "2", "3",...}; StringBuilder placeholders = new StringBuilder(); for (int i = 0; i < ids.length; i++) { if (i != 0) placeholders.append(", "); placeholders.append("?"); } String where = "id IN (" + placeholders.toString() + ")"; db.delete("rows", where, args);