#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);
этот код не сложен, но я думал, что будет «более чистый» способ сделать это… есть?