Android中的Sugar ORM:更新SQLite中保存的对象

Posted

技术标签:

【中文标题】Android中的Sugar ORM:更新SQLite中保存的对象【英文标题】:Sugar ORM in Android: update a saved object in SQLite 【发布时间】:2015-01-06 06:48:31 【问题描述】:

我是在 android 上使用 SQLite 和 Sugar ORM 开发应用程序的新手,并尝试通读 Sugar ORM 文档,但没有找到有关如何更新 SQLite 中保存的对象的任何内容。更改属性后我还能保存对象吗?类似:

Customer myCustomer = (Customer.find(Customer.class, "id = ?", id)).get(0);
myCustomer.setName("new name");
myCustomer.setAddress("new Address");
myCustomer.save(); // is this okay for updating the object?

save() 方法不会在保持旧条目不变的情况下创建另一个新对象,对吧?

【问题讨论】:

【参考方案1】:

您的代码应该毫无问题地更新该行。

From the docs - Update Entity:

Book book = Book.findById(Book.class, 1);
book.title = "updated title here"; // modify the values
book.edition = "3rd edition";
book.save(); // updates the previous entry with new values.

【讨论】:

【参考方案2】:

它将更新您的实体。 Sugar ORM 覆盖您现有的例如名称,并在调用 save() 方法后用“新名称”更新它。

【讨论】:

@ShylendraMadda 你有没有弄清楚 .update() 是做什么的?似乎不起作用,在文档中找不到。 @HannahLouisaCarney 是的,我看到了,但是保存和更新的操作是一样的,那么 Sugar ORM 中的保存和更新有什么区别? 两者最大的区别在于save()使用id字段选择要更新的记录,而update()使用任何可能被@Unique注解的字段来选择记录,仅使用 id 作为最后的手段。还值得一提的是,如果更新不成功,例如,如果唯一字段的条目或 id 条目不存在,则 update() 会退回到 save()。希望这会有所帮助:)。 那么save方法有什么用呢?哈哈)人们总是可以使用 update() - 我喜欢它:)【参考方案3】:

更新保存的对象非常简单。

检索对象;

Object object= Object.findById(Object.class, ID);

设置你需要的属性;

object.setAttr("new value");

然后最后调用save;

object.save();

或者,正如上面提到的,可以选择使用 update(),它的工作方式略有不同,理想情况下在更改多个属性时使用;

首先创建对象并设置必要的属性;

Object object= new Object();
object.setAttr("some data");

然后为理想情况下已经存在在数据库中的对象设置一个 ID,以便针对该项目进行替换;

object.setID(ID);

最后;

object.update();

【讨论】:

object.update();更新数据库中的所有记录。请关注 object.setID(ID); object.save();【参考方案4】:

Save 和 Object 方法完全不同,两者都非常有用。 如果你有一个对象并且你说:

Object.save();

这也将覆盖所有其他字段,例如:

column1       column2
1             1

如果在你的对象中你只设置了 column1 对应的字段一个像 2 这样的数字,你会得到:

Object.save();

column1       column2
2             NULL

Object.update();

column1       column2
2             1

您不需要显式使用 .setId() 来进行更新,它会查找一个唯一的项目,如果找到它会更新它,如果没有,它将创建一个新行。默认情况下,自动递增 ID 列是添加到您的每个表中并用作更新的唯一 ID。如果您需要自己的字段是唯一的使用:

@Unique
String MyID

或者你可以使用多个相同的东西:

@MultiUnique("MyFirstID,MySecondID")
public class MyClass extends SugarRecord ...

这两者都是表格中字段的名称。

【讨论】:

以上是关于Android中的Sugar ORM:更新SQLite中保存的对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在LibGDX中实现Sugar ORM

如何建立两个实体之间的关系 - Sugar ORM

Sugar ORM 是不是采用序列化名称作为列名?

Android Studio SugarORM No Such Table

Android ORM -- Litepal

[转]Android ORM系列之GreenDao最佳实践