android sqlite неограниченное количество аргументов привязки

#java #android #sql #sqlite #android-studio

Вопрос:

Я использую этот код для обновления своих записей на 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.
 

Я также попытался вместо того, чтобы вставлять goals в виде String массива несколько аргументов, используя массив из одной ячейки String , в котором все аргументы объединены запятыми между ними, как если бы это была обычная SQL инструкция, она не оставила сообщения об ошибке, но также не работала (ячейки не были обновлены).

как я могу сделать допустимое количество аргументов (привязать аргументы) неограниченным? Я не знаю, сколько аргументов я получаю в массиве, это не ограничено каким-либо числом.

Ответ №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);
 

этот код не сложен, но я думал, что будет «более чистый» способ сделать это… есть?