Рассмотрим SQL, который будет выполняться вашим вызовом update()
. Возьмем первую итерацию (i = 1):
UPDATE table_name SET numerazione = 1 WHERE numerazione != 1
Для любой строки, где numerazione
не равно 1, будет установлено значение 1, поэтому в результате каждая строка имеет numerazione
= 1. Теперь мы запускаем следующую итерацию (i = 2):
UPDATE table_name SET numerazione = 2 WHERE numerazione != 2
Для любой строки, где numerazione
не равно 2, будет установлено значение 2. Но после предыдущей итерации все строки имеют numerazione
= 1, поэтому этот оператор обновит все строки. То же самое происходит и для оставшихся итераций, причем последняя устанавливает numerazione
на 7 для всех строк.
Вам нужно найти какое-то другое предложение WHERE или какой-либо другой способ обновить ваши строки. Одним из решений является создание предложения WHERE с использованием оператора NOT IN
и с каждым разом увеличения списка. У первого будет NOT IN (1)
, у второго будет NOT IN (1,2)
и так далее. Поскольку вам нужно сделать это только небольшое количество раз, это не будет слишком плохо для производительности.
private String buildWhere(int number) {
StringBuilder builder = new StringBuilder(MyTable.NUMERAZIONE).append( "NOT IN (1");
for (int i = 2; i <= number; i++) {
builder.append(',').append(i);
}
builder.append(')');
return builder.toString();
}
...
datab.update(MyTable.TABLE_NAME, cv, buildWhere(i), null);
В результате должны получиться следующие утверждения:
UPDATE table_name SET numerazione = 1 WHERE numerazione NOT IN (1)
UPDATE table_name SET numerazione = 2 WHERE numerazione NOT IN (1,2)
...
UPDATE table_name SET numerazione = 7 WHERE numerazione NOT IN (1,2,3,4,5,6)
person
Karakuri
schedule
10.07.2015
<>
, а не!=
. - person m0skit0   schedule 10.07.2015