【问题标题】:How to truncate all tables in realm android如何截断领域android中的所有表
【发布时间】:2015-01-22 09:12:24
【问题描述】:

您好,当用户注销时,我试图截断 android 中的所有表。我只使用领域默认路径。

realm = Realm.getInstance(getApplicationContext());

public void clearDB() {
    Realm.deleteRealmFile(instance);
}

【问题讨论】:

    标签: android realm


    【解决方案1】:

    更新

    使用 realm.delete(Foo.class) 代替 clear() 已弃用。从 0.91.0 所有@Deprecated 方法都将被删除。


    来自Realm的Christian。 只要您关闭了所有打开的 Realm 实例,这种方法就会起作用。 另一种方法是像这样清除您想要的表:

    realm = Realm.getInstance(getApplicationContext());
    
    public void clearDB() {
      realm.executeTransaction(new Realm.Transaction() {
         @Override
         public void execute(Realm realm) {
            realm.clear(Foo.class);
            realm.clear(Bar.class);
         }
      });
    }
    

    您可以在此处阅读更多内容:http://realm.io/docs/java/0.77.0/api/io/realm/Realm.html#clear(java.lang.Class)

    【讨论】:

    • 在哪个文件夹下创建代理文件??
    • 如果您使用的是 Android Studio,它位于:/build/intermediates/classes/debug/io/realm,但您应该能够使用 Class 操作(cmd + o on Mac)。
    • 对于 eclipse 我应该在哪里找到 tat one
    • 查看这里如何找到:realm.io/docs/java/0.77.0/#installation,但默认是项目下的 .apt_generated 文件夹(通常是隐藏的)。
    • 关于数据库中表类的附加说明。可以用realm.io/docs/java/latest/api/io/realm/…枚举所有表类,在不需要清空所有表的情况下很有用。
    【解决方案2】:

    使用 realm.delete(Myclass.class);

    realm = Realm.getDefaultInstance();
    
        realm.beginTransaction();
        realm.delete(SuggestedAppDto.class);
        realm.delete(WifiSpotsDto.class);
        realm.commitTransaction();
        realm.close();
    

    这对我有用。

    【讨论】:

      【解决方案3】:

      如果要清空所有表,可以考虑使用realm.deleteAll()方法:

      Realm realm = Realm.getDefaultInstance();
      realm.beginTransaction();
      realm.deleteAll();
      realm.commitTransaction();
      realm.close();
      

      【讨论】:

        【解决方案4】:

        删除所有表:

        Realm.init(fragmentActivity);
            RealmConfiguration realmConfig = new RealmConfiguration.Builder().deleteRealmIfMigrationNeeded().build();
            Realm realm = Realm.getInstance(realmConfig);
            realm.beginTransaction();
            try {
                realm.deleteAll();
                realm.commitTransaction();
            } catch (Exception e) {
                e.printStackTrace();
                realm.cancelTransaction();
            } finally {
                realm.close();
            }
        

        删除一个或多个表:

          public void clearSearchHistory() {
        
            Realm.init(fragmentActivity);
            RealmConfiguration realmConfig = new RealmConfiguration.Builder().deleteRealmIfMigrationNeeded().build();
            Realm realm = Realm.getInstance(realmConfig);
        
            realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    realm.delete(Foo.class);
                }
            });
        
        
        }
        

        【讨论】:

          【解决方案5】:

          如果您想清除所有表而不担心忘记清除将来可能创建的新表,只需执行此操作

          // mRealm is your realm instance
          
          mRealm.beginTransaction();
          Set<Class<? extends RealmModel>> tables = mRealm.getConfiguration().getRealmObjectClasses();
          for (Class<? extends RealmModel> table : tables) {
              mRealm.delete(table);
          }
          mRealm.commitTransaction();
          

          【讨论】:

            猜你喜欢
            • 2015-01-18
            • 2011-08-27
            • 2010-12-14
            • 2013-02-16
            • 2017-09-24
            • 2011-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多