【问题标题】:Delete multiple rows in Android SQLITE在 Android SQLITE 中删除多行
【发布时间】:2019-04-14 14:28:16
【问题描述】:

在我的应用程序中,我试图同时执行两个删除查询,它们使用相同的输入进行删除。我正在使用 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)

【问题讨论】:

    标签: android database sqlite android-sqlite


    【解决方案1】:
    db.delete(TABLE_NAME, "CAST("+KEY_ID+" AS TEXT) IN (" + new String(new char[ids.length-1]).replace("\0", "?,") + "?)", ids);
    

    【讨论】:

      【解决方案2】:

      您不能像这样将参数传递给IN 子句。
      我想ids 是一个String 要删除的ID 数组。
      您必须创建一个由数组ids 的所有项目组成的字符串,并以, 分隔:

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

      您将需要此导入:

      import android.text.TextUtils;
      

      然后:

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

      如果 id 是整数,这将起作用,但如果它们是字符串,则必须先将它们全部用单引号括起来。

      【讨论】:

      • id 是字符串
      猜你喜欢
      • 1970-01-01
      • 2012-05-19
      • 2023-04-03
      • 2019-11-07
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多