如果值已经存在,如何更新领域数据库
问题描述:
如果它已经存在于领域数据库中,如何更新值; 我试图构建一个应用程序来显示一些着名作者的引用, 该应用程序将有一些作者,每个作者将有一些报价, 当我第一次运行该应用程序时,它完美运行,但是当我尝试运行它时再次显示我的值已经存在错误。
这是我的模型类如果值已经存在,如何更新领域数据库
public class Author extends RealmObject {
@PrimaryKey
private String name;
private RealmList<Quotes>quote;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Author() {
}
public RealmList<Quotes> getQuote() {
return quote;
}
public void setQuote(RealmList<Quotes> quote) {
this.quote = quote;
}
public Author(String name, RealmList<Quotes> quote) {
this.name = name;
this.quote = quote;
}
}
public class Categories extends RealmObject {
@PrimaryKey
private String category;
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public Categories() {
}
public Categories(String category) {
this.category = category;
}
}
public class Quotes extends RealmObject {
private String Quote;
private Categories category;
public Categories getCategory() {
return category;
}
public void setCategory(Categories category) {
this.category = category;
}
public String getQuote() {
return Quote;
}
public void setQuote(String quote) {
Quote = quote;
}
public Quotes() {
}
public Quotes(Categories category, String quote) {
this.category = category;
Quote = quote;
}
}
这是我mainActivity,我将数据库和得到的错误:值已存在
public class MainActivity extends AppCompatActivity {
Realm mRealm;
Categories wisdom;
Categories fear;
Categories motivation;
Categories life;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RealmConfiguration configuration=new RealmConfiguration.Builder(this).build();
Realm.setDefaultConfiguration(configuration);
mRealm=Realm.getDefaultInstance();
mRealm.beginTransaction();
wisdom=mRealm.createObject(Categories.class);
fear=mRealm.createObject(Categories.class);
wisdom.setCategory("wisdom");
fear.setCategory("fear");
life.setCategory("Life");
motivation.setCategory("Motivation");
Author john_green=mRealm.createObject(Author.class);
john_green.setName("John Green");
Quotes john_green_1=mRealm.createObject(Quotes.class);
john_green_1.setQuote("My thoughts are stars I can't fathom into constellations.");
john_green_1.setCategory(motivation);
john_green.getQuote().add(john_green_1);
Quotes john_green_2=mRealm.createObject(Quotes.class);
john_green_2.setQuote("What is the point of being alive if you don’t at least try to do something remarkable?");
john_green_2.setCategory(motivation);
john_green.getQuote().add(john_green_2);
mRealm.commitTransaction();
}
}
答
尝试找到它首先,如果没有找到它(返回null)创建对象。
mRealm=Realm.getDefaultInstance();
mRealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
Category wisdom = realm.where(Categories.class).equalTo("category", "wisdom").findFirst();
if(wisdom == null) {
wisdom = realm.createObject(Categories.class);
wisdom.setCategory("wisdom");
}
//more code
}
});
+0
我是否应该为每个作者和每个引用对象执行相同操作? –
如果你的对象有一个主键,你可以用相同的PK对象调用'copyToRealmOrUpdate()'。否则,你可以使用@quidproquo的答案。 – beeender