Удалить несколько строк в Android SQLITE - PullRequest
2 голосов
/ 14 апреля 2019

В моем приложении я пытаюсь выполнить два запроса на удаление одновременно, которые удаляются с использованием одного и того же ввода. Я использую предложение IN. Но я получаю ошибку. Мой ключ - строковое значение.

Способ ....

public void deleteUsingList(String[] ids) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(TABLE_FAV_AMEN, KEY_AD_ID + " IN (" + "?)", ids);
    db.delete(TABLE_FAV_HEAD, KEY_AD_ID + " IN (" + "?)", ids);
    db.close();
}

Моя ошибка ....

2019-04-14 19:57:48.102 14802-14802/com.estate.dushanmadushanka.estate E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.estate.dushanmadushanka.estate, PID: 14802
    java.lang.IllegalArgumentException: Too many bind arguments.  2 arguments were provided but the statement needs 1 arguments.
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java)
        at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java)
        at com.estate.dushanmadushanka.estate.other.SQLiteHandler.deleteUsingList(SQLiteHandler.java:159)
        at com.estate.dushanmadushanka.estate.activity.FavouriteActivity$2.onClick(FavouriteActivity.java:84)
        at android.view.View.performClick(View.java)
        at android.view.View$PerformClick.run(View.java)
        at android.os.Handler.handleCallback(Handler.java)
        at android.os.Handler.dispatchMessage(Handler.java)
        at android.os.Looper.loop(Looper.java)
        at android.app.ActivityThread.main(ActivityThread.java)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)

Ответы [ 2 ]

2 голосов
/ 14 апреля 2019
db.delete(TABLE_NAME, "CAST("+KEY_ID+" AS TEXT) IN (" + new String(new char[ids.length-1]).replace("\0", "?,") + "?)", ids);
0 голосов
/ 14 апреля 2019

Вы не можете передавать параметры в предложение IN следующим образом.Я полагаю, ids - это массив String идентификаторов, которые вы хотите удалить.Вы должны создать строку, состоящую из всех элементов массива ids, разделенных ,:

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

, вам потребуется этот импорт:

import android.text.TextUtils;

, а затем:

db.delete(TABLE_FAV_AMEN, KEY_AD_ID + " IN (?)", strIn);

Это будет работать, если идентификаторы являются целыми числами, но если они являются строками, вы должны сначала заключить их в одинарные кавычки.

...