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

  • ¿Qué hace un EditText.getText () en android devuelve si está vacío?
  • Tiempo de espera para solicitud de servidor hecha usando "Volley" solo en Android no iOS
  • Cómo imprimir el recibo de la factura con una impresora térmica bluetooth
  • El servidor ADB no reconoció
  • RegisterMediaButtonEventReceiver / manejo de botones de volumen tema
  • NoSuchMethodError com.google.android.gms.internal.gf
  • 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?

  • Cómo cambiar el tamaño del emulador AVD en Android Studio?
  • Ormlite interior ensambla en tres tablas
  • Abra otra aplicación de su propia (intención)
  • ¿Podría alguien ayudarme con este informe de accidente
  • "Esperando dispositivo" al depurar en el teléfono
  • Dispositivo que se desconecta aleatoriamente (y aparece varias veces como sin conexión) en Eclipse - arregla?
  • 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.