[英]update Realm table only if Record is new (Java)
僅當記錄是新記錄時(通過檢查記錄的 objectId 在我存儲的表中尚不存在),我才嘗試更新我的表,我的 objectId 是主鍵。 我嘗試添加條件realm.where(NotesRealmClass.class).notEqualTo("objectId", Id);
但它似乎不起作用如何僅當記錄是新記錄時我才能添加記錄,或者我們可以說 - 停止更新以前存儲的記錄
public void storeNotes( String Id, String Title ,String Location) {
realm.beginTransaction();
NotesRealmClass Notes = new NotesRealmClass();
Notes.setobjectId(Id);
Notes.setLocation(Location);
Notes.setTitle(Title);
realm.where(NotesRealmClass.class).notEqualTo("objectId", Id); // i tired to check if we already have the object with object Id
realm.copyToRealmOrUpdate(Notes);
Toast.makeText(context, "Notes Stored", Toast.LENGTH_SHORT).show();
realm.commitTransaction();
}
有2個選項。
您可以將方法copyToRealm()
與try...catch
。 Realm 不允許創建具有相同主鍵的對象並拋出異常。
public void storeNotes( String Id, String Title ,String Location) {
try {
realm.beginTransaction();
NotesRealmClass Notes = new NotesRealmClass();
Notes.setobjectId(Id);
Notes.setLocation(Location);
Notes.setTitle(Title);
realm.copyToRealm(Notes); // <======
Toast.makeText(context, "Notes Stored", Toast.LENGTH_SHORT).show();
realm.commitTransaction();
} catch (Exception error) {
realm.cancelTransaction();
}
}
為了在沒有try...catch
情況下做同樣的事情,並且更接近你的方法,你應該在你的代碼中進行修復
public void storeNotes( String Id, String Title ,String Location) {
realm.beginTransaction();
NotesRealmClass Notes = new NotesRealmClass();
Notes.setobjectId(Id);
Notes.setLocation(Location);
Notes.setTitle(Title);
if (realm.where(NotesRealmClass.class).equalTo("objectId", Id).count() == 0) {
// there are no object with this `Id`
realm.copyToRealmOrUpdate(Notes);
}
Toast.makeText(context, "Notes Stored", Toast.LENGTH_SHORT).show();
realm.commitTransaction();
}
檢查具有該 id 的對象數量是否等於 0 - 如果這是真的,則插入您的新對象:
if (realm.where(NotesRealmClass.class).equalTo("objectId", Id).count() == 0) {
realm.copyToRealm(Notes);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.