Cómo eliminar filas en SQLite con múltiples args donde?

Quiero eliminar filas que satisfacen cualquiera de las condiciones múltiples.

Por ejemplo, pasar una lista de ID, y quiero eliminar todas las filas con estos IDs (IDs son únicos).

Esto sería:

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

¿Hay alguna manera de hacerlo compacto sin OR múltiple?

Puede obtenerlo a través del método db.execSQL y la palabra clave IN de SQL. Por ejemplo:

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

Lo que usted quiere utilizar es una cláusula IN , algo así como (con 4 ID);

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

A petición, este es (un ejemplo de) cómo puede hacerlo dinámicamente;

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

La documentación oficial de Android dice aquí que el uso de execSQL no es la forma correcta de eliminar registros.

Me gustaría sugerir el siguiente método simple. Uso de 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(); } 

He hecho esto usando esto:

Sqlite Statement Sintaxis:

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

Ejemplo basado en la pregunta:

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

Puede usar id IN (1, 2, 3, 4, ...) e imprimir directamente los valores de matriz dentro de los corchetes:

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

Como alternativa, intentaría usar algún tipo de columna de flags para esas cosas (si hay algo como ser capaz de marcar entradas únicas para borrar, no sé cómo se construye su lista de ID).

He aquí un ejemplo que construye la cadena de marcador de posición "?,?,?, …" con StringBuilder. Si hay muchos parámetros, la concatenación de cadena simple crearía mucha basura, StringBuilder ayuda con eso.

 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); 
  • Androide. Proveedor de contenido o base de datos?
  • Comprobación de SQLite de SQL si las tablas contienen filas
  • Cómo utilizar correctamente claves foráneas en Android, utilizando SQLite y OrmLite
  • Android: Obtiene ResultSet de la base de datos SQLite y luego usa OpenCSV
  • Sqlite onCreate () problema Quiero que mi base de datos creada una vez, y no va a cambiar, pero no puedo crear datos cuando estoy en onCreate ()
  • ¿Cómo utilizar correctamente TextSwitcher en ListView?
  • Acceda a la base de datos en una clase que no sea de actividad
  • ¿Qué es la base de datos "-journal" SQLite en Android?
  • Cómo importar la biblioteca Persistence Room a un proyecto de Android
  • Android: onUpgrade no llama a la actualización de la base de datos
  • Cierre de la base de datos en un ContentProvider
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.