ActiveAndroid Update() 查询

11

我正在尝试使用ActiveAndroid批量更新列,以下是我的代码:

new Update(SomeModel.class).set("Enabled = 0").execute();
但我遇到了一个StackOverflowError错误。(编辑:我的错,错误在其他地方)。有人知道如何执行Update()查询吗?在ActiveAndroid的wiki中没有任何说明。

编辑:

这个语法是正确的:

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

如果不需要,您可以跳过where


你能添加你的堆栈跟踪吗? - Joshua Pinter
@jlhonora 为什么要使用 .set("Enable = 0") .. P.S:我是 Active Android 的新手.. - Ajay Jayendran
1
@Ajay 因为它比加载+保存更高效,特别是当您需要更新许多项目时。 - jlhonora
3个回答

20

这个语法是正确的:

new Update(SomeModel.class)
  .set("Enabled = 0")
  .where("Account = ?", account.getId())
  .execute();
您可以跳过 where 条件,如果不需要的话。

1
.set("Enabled = ?", 0)是有效的吗? - Hamzeh Soboh
2
@Hamzeh 是的,那也是有效的。 - jlhonora

12
基于AndroidActive的Github,"save方法适用于插入和更新记录"。
因此,如果您想要更新一个项目,首先必须从数据库中读取它,然后修改它,最后再次保存它。
例如:
Foo for = Foo.load(Foo.class, 1);//1 is the id
foo.bar = "new value";
foo.save();

1
这是非常低效的,特别是如果你需要更新很多项。 - jlhonora
如果你想要保存大量项目,让我们使用ActiveAndroid事务 从这里。顺便问一下,你能给出更好的解决方案吗? - Justin

1
您也可以使用类似这样的代码:

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();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接