如何从Android领域数据库中删除对象?

问题描述 投票:0回答:6

我想从领域中删除所有等于 userid 的消息对象

RealmQuery<Message> rowQuery = realm.where(Message.class).equalTo(Message.USER_ID, userId);
realm.beginTransaction();
//TODO : here I want to remove all messages where userId is equal to "9789273498708475"
realm.commitTransaction();
android database realm
6个回答
124
投票

在 0.88.3 及以下版本中您可以执行以下操作:

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        RealmResults<Message> rows = realm.where(Message.class).equalTo(Message.USER_ID,userId).findAll();
        rows.clear();
    }
});

从 0.89(下一个版本)开始,这将改为

deleteAllFromRealm()

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        RealmResults<Message> result = realm.where(Message.class).equalTo(Message.USER_ID,userId).findAll();
        result.deleteAllFromRealm();
    }
});

11
投票

这必须在

realm.beginTransaction();
realm.commitTransaction();
之间完成,我还在代码示例中列出了一些
args()

realm.beginTransaction();
MessageObject messageobj = realm.where(Message.class)
                         .findFirst()  //or
                         .greaterThan("age", 10) // implicit AND
                         .beginGroup() //or you can use
                         .equalTo("name", "Peter")
                         .or()
                         .contains("name", "Jo")
                         .endGroup()
                         .findAll();
messageobj.deleteFromRealm();
realm.commitTransaction();

4
投票

这就是我使用它的方式

  RealmResults<CartDBItems> rows= realm.where(CartDBItems.class).equalTo("id", id).findAll();;
         rows.deleteAllFromRealm();

2
投票

适用于 v10 以下领域的 Android 用户。下面给出的效果很好

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
        RealmResults<Note> result = realm.where(Notes.class).equalTo(Note.NOTE_ID,noteID).findAll();
        result.deleteAllFromRealm();
    }
});

但是,v10及以上版本会崩溃

Running transactions on the UI thread has been disabled.

只要您运行 v10 之前的 Realm,如果您从 UI 线程运行执行事务,您的应用程序就不会崩溃。对于即将发布的 v10 版本,我们在

RealmConfiguration.Builder
中引入了两个新设置,即
allowWritesOnUiThread
allowQueriesOnUiThread
,这将允许用户控制是否允许从 UI 线程运行事务和/或查询。

RealmConfiguration config = new RealmConfiguration.Builder()
  .allowWritesOnUiThread(true)
  .build()

它会像往常一样工作。因此,您可以决定何时/是否要选择新行为。


1
投票
 myRealm.beginTransaction();

     RealmResults<Datos> datos = myRealm.where(DatosCliente.class)
                        .equalTo("folio",FOLIO)
                        .findAll();

 datos.deleteAllFromRealm();

0
投票

通过Id删除对象

fun deleteLocation(id: String) = withContext(Dispatchers.IO) {
  val objectId = ObjectId(id)
  realm.write {
    val locationEntity = query<LocationEntity>("id == $0", objectId).find().firstOrNull()
    if (locationEntity != null) {
      delete(locationEntity)
    }
  }
}

示例对象

class LocationEntity : RealmObject {
  @PrimaryKey
  var id: ObjectId = ObjectId() // generates a unique id automatically

  var latitude: Double = 0.0

  var longitude: Double = 0.0

  var accuracy: Float = 0.0f
} 

从 ObjectId() 到 String

entity.id.toHexString()

从 String 到 ObjectId()

val objectId = ObjectId(id)
© www.soinside.com 2019 - 2024. All rights reserved.