【问题标题】:android sqlite unlimited bind argumentsandroid sqlite 无限绑定参数
【发布时间】:2021-11-15 20:18:19
【问题描述】:

我使用此代码更新我在 java 中的记录:

    ArrayList<String> goalsNameList = new ArrayList<>();
    for (Goal goal : goalsList) {
        goalsNameList.add(goal.getName());
    }
    String[] goals = goalsNameList.toArray(new String[0]);
    ContentValues cv = new ContentValues();
    cv.put(GoalEntry.COLUMN_GOAL_PARENT, parent.getName());
    sQLiteDatabase.update(GoalEntry.TABLE_NAME, cv, GoalEntry.COLUMN_GOAL_NAME + " IN (?, ?)", goals);

我得到这个错误:

java.lang.IllegalArgumentException: Too many bind arguments.  6 arguments were provided but the statement needs 3 arguments.

我也尝试过使用一个单元格String 数组而不是将goals 作为多个参数的String 数组插入,该数组包含所有参数,它们之间用逗号连接,就好像它是一个普通的@987654326 @ 声明,它没有留下错误消息,但也没有工作(单元格没有更新)。

如何使有效的参数数量(绑定参数)不受限制?我不知道我在数组中得到的参数数量,它不限于任何数量。

【问题讨论】:

    标签: java android sql sqlite android-studio


    【解决方案1】:

    显然,我可以创建一个 for 循环,为数组中的每个目标添加“?”,并且该代码正在运行:

        ArrayList<String> goalsNameList = new ArrayList<>();
        for (Goal goal : goalsList) {
            goalsNameList.add(goal.getName());
        }
        String[] goals = goalsNameList.toArray(new String[0]);
        ContentValues cv = new ContentValues();
        cv.put(GoalEntry.COLUMN_GOAL_PARENT, parent.getName());
        StringBuilder inCluse = new StringBuilder(" IN (?");
        for(int i = 0; i < goals.length - 1; i ++){
            inCluse.append(", ?");
        }
        inCluse.append(")");
        sQLiteDatabase.update(GoalEntry.TABLE_NAME, cv, GoalEntry.COLUMN_GOAL_NAME + inCluse.toString(), goals);
    

    这段代码并不复杂,但我认为会有一种“更简洁”的方式来做到这一点……有吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      相关资源
      最近更新 更多