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中保存的对象的主要内容,如果未能解决你的问题,请参考以下文章