【问题标题】:Delete All Realm Objects During Runtime在运行时删除所有领域对象
【发布时间】:2015-12-18 03:59:10
【问题描述】:

在 iOS 上,我们可以轻松地调用 realm.deleteAllObjects(); 来删除 Realm 数据库中的所有对象。

我们如何在 Android 中实现相同的目标?

【问题讨论】:

    标签: java realm


    【解决方案1】:

    从 Realm 数据库中删除所有对象:

    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            realm.deleteAll();
        }
    });
    

    从 Realm 数据库中删除所有同类对象:

    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            realm.delete(Dog.class);
        }
    });
    

    删除查询结果:

    final RealmResults<Dog> results = realm.where(Dog.class).findAll();
    
    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            // remove single match
            results.deleteFirstFromRealm();
            results.deleteLastFromRealm();
    
            // remove a single object
            Dog dog = results.get(5);
            dog.deleteFromRealm();
    
            // Delete all matches
            results.deleteAllFromRealm();
        }
    });
    

    【讨论】:

    • 很好的例子。感谢分享!
    【解决方案2】:

    您可以通过使用结果来做到这一点-例如,如果我想删除所有 Dog 对象,我可以执行以下操作-

    // obtain the results of a query
    
    RealmResults<Dog> results = realm.where(Dog.class).findAll();
    
    // All changes to data must happen in a transaction
    realm.beginTransaction();
    
    // Delete all matches
    results.deleteAll();
    
    realm.commitTransaction();
    

    参考:documentation

    【讨论】:

    • 不推荐使用此答案。请参阅 The Todor 的答案以获得有效的解决方案。
    • 您应该改用 results.deleteAllFromRealm() .. 因为 results.clear() 已被弃用。请更新你的答案
    • 在领域 3.5.0 realm.clear() 已弃用,您可以使用删除
    【解决方案3】:

    现在clear() 已被弃用。相反,引用 documentation 您应该使用 results.deleteAllFromRealm()realm.deleteAll()realm.delete(Dog.class)

    【讨论】:

      【解决方案4】:

      我用它来删除所有对象:

          private void clearAllRealmPerson(){
      
              Realm realm = Realm.getDefaultInstance();
      
              realm.beginTransaction();
              realm.clear(Person.class);
              realm.commitTransaction();
              realm.close();
         }
      

      【讨论】:

        【解决方案5】:
                   try {
               val realm = Realm.getDefaultInstance()
                realm.beginTransaction()
                realm.delete<Dog>()
                realm.insertOrUpdate(dogs)
                realm.commitTransaction()
                realm.close()
            } catch (e: Exception) {
                e.message
            }
        

        【讨论】:

          【解决方案6】:

          更新 3.7.0

          realm.beginTransaction();
          realm.deleteAll();
          //else realm.delete(obj_A.class);
          realm.commitTransaction();
          

          【讨论】:

          • 你能详细说明你的答案吗?我找不到 3.7.0 中关于这个主题的变化。谢谢。
          • 在以前的 Realm 版本中,有 clear(A.class); 方法在新版本中已被弃用。 @大卫米格尔
          • cleardeprecated in version 0.89.0 不在 3.7.0 中。
          【解决方案7】:

          看起来 Realm API 发生了变化。根据the docs,现在是这样的

          let all = realm.objects(Books.self)
          realm.delete(all)
          

          如果您还没有将其包装在事务中,请不要忘记。

              try! realm.write {
                      let all = realm.objects(Rogets.self)
                      realm.delete(all)
                  }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-28
            • 2022-01-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-09-24
            相关资源
            最近更新 更多