我需要同步应用程序中的数据。我向服务器发出请求,绑定(bind)并使用 copyToRealmOrUpdate(Iterable<E> objects)
将此数据添加或更新到数据库。
但是我的文件可能会失效,我需要一些东西来删除根据请求返回的数据中没有的所有内容。我不想通过截断或手动删除来执行此操作,因为性能很重要。
想法1
@beeender
您认为使用表的 PRIMARY_KEY 删除我不想要(或不需要)的数据怎么样?
看起来像:
1°:如果数据库已填充,则获取所有主键并将其添加到
HashMap
中(或任何具有相同功能的东西)。2°:更新数据或添加、删除
HashMap
的项目(使用主键)如果已更新或添加。3°:删除
HashMap
的所有项目在王国上。
最佳答案
也许在这种情况下内存 Realm
对您来说是一个不错的选择。您可以找到相关文档here .
通过使用内存 Realm :
- 当您启动新的应用进程时,数据库将为空
- 关闭 Realm 的所有实例后,数据也会被清除。
------------------------------------------------ 正常情况下删除数据的更新 -----------------------------------------------------------------
要删除,您可以使用一些选项
- 删除特定型号的所有数据,请参阅 doc
Realm.allObjects(MyModel.class).clear();
- 通过(Realm API)[ https://realm.io/docs/java/latest/api/io/realm/Realm.html#deleteRealm(io.realm.RealmConfiguration)] 从给定 Realm 中删除整个数据(首先关闭所有实例!):
Realm.deleteRealm(realmConfig);
- 或者只是通过普通的 java API 删除 Realm 文件。
如果您确实关心性能,您可以考虑将这些数据分离到一个 Realm 中,并使用选项 2 或 3 来删除它们。请参阅文档here通过RealmConfiguration
使用不同的Realm。
------------------------------------------------ 更新按日期字段删除 ------------------------------------------------- -----
对于您的用户案例,这将是一个不错的选择:
向模型添加
Date
字段,并添加注释@Index
以加快查询速度。更新/添加行并将修改日期设置为当前时间。
删除
modifiedDate
早于当前日期的对象。realm.where(MyModel.class).lessThan("modifiedDate", currentDate).findAll()。清除()
注意:“日期以一秒的精度截断。为了保持 32 位和 64 位设备之间的兼容性,不可能存储 1900 年 12 月 13 日之前和 2038 年之后的日期 - 01-19。”参见current limitations 。如果您可以在很短的时间内修改表格但精度不合适,请考虑改用 int
字段。您可以通过 RealmResult.max()
获取列的最大值
关于android - 复制到 Realm 或更新和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32211488/