Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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).

  • Cómo hacer RadioGroup botones de radio con imágenes en Android ... ¿Cómo?
  • Caché ExoPlayer
  • Cómo auto centro de cultivo ImageView Android?
  • No se puede pasar el objeto personalizado en un intento: El método Poner extra es ambiguo para el tipo Intención
  • Cómo crear viewpager circular?
  • Api de YouTube: No está conectado. Llame a connect () y espere a que onConnected () se llame
  • 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?

  • Java Dates - ¿Cuál es la clase correcta para usar?
  • Cómo eliminar carpetas en sdcard de explorador de archivos en android
  • Cómo obtener archivos en activos desde Android NDK
  • Emulador de Android: Error de instalación: INSTALL_FAILED_VERSION_DOWNGRADE
  • Almacenamiento de una contraseña
  • Llamada Hilo principal de hilo secundario en Java / Android
  • 6 Solutions collect form web for “Cómo eliminar filas en SQLite con múltiples args donde?”

    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); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.