Запрос ActiveAndroid Update()

Я пытаюсь выполнить массовое обновление столбца с помощью ActiveAndroid. Вот мой код:

new Update(SomeModel.class).set("Enabled = 0").execute();

Но я получаю StackOverflowError. (Редактировать: Плохо, ошибка была где-то в другом месте). Кто-нибудь знает, как выполнить запрос Update()? В вики ActiveAndroid ничего не сказано.

Редактировать:

Этот синтаксис правильный:

new Update(SomeModel.class)
  .set("Enabled = 0")
  .where("Account = ?", account.getId())
  .execute();

Вы можете пропустить where, если он не нужен.


person jlhonora    schedule 10.04.2014    source источник
comment
Можете ли вы добавить трассировку стека?   -  person Joshua Pinter    schedule 12.04.2014
comment
@jlhonora, почему вы должны использовать .set(Enable = 0) .. PS: я новичок в Active Android ..   -  person Ajay Jayendran    schedule 29.07.2017
comment
@Ajay, потому что это более эффективно, чем загрузка + сохранение. Особенно, если у вас есть много элементов для обновления.   -  person jlhonora    schedule 29.07.2017


Ответы (3)


Этот синтаксис правильный:

new Update(SomeModel.class)
  .set("Enabled = 0")
  .where("Account = ?", account.getId())
  .execute();

Вы можете пропустить где, если не нужно.

person jlhonora    schedule 23.10.2015
comment
допустимо ли быть .set("Enabled = ?", 0) ? - person Hamzeh Soboh; 10.07.2017
comment
@Hamzeh да, это тоже верно - person jlhonora; 10.07.2017

На основе Github AndroidActive: "Метод сохранения работает как для вставки и обновление записей."
Итак, если вы хотите обновить элемент, сначала вы должны прочитать его из базы данных, затем изменить его и, наконец, снова сохранить.
Например:

Foo for = Foo.load(Foo.class, 1);//1 is the id
foo.bar = "new value";
foo.save();
person Justin    schedule 03.07.2014
comment
Это очень неэффективно, особенно если вам нужно обновить много элементов. - person jlhonora; 29.07.2015
comment
@jlhonora: если вы хотите сохранить много элементов, используйте ActiveAndroid transaction отсюда. Кстати, не могли бы вы дать лучшее решение? - person Justin; 30.07.2015

Вы также можете использовать что-то вроде этого:

SomeModel model = selectField("fieldName", "fieldValue");
model.field = newValue;
model.save();

где selectField()метод:

public static SomeModel selectField(String fieldName, String fieldValue) {
    return new Select().from(SomeModel.class)
            .where(fieldName + " = ?", fieldValue).executeSingle();
}
person Milad Faridnia    schedule 29.07.2015