如果退出,Android Room部分更新

时间:2017-07-14 09:09:56

标签: android sql-update android-room

我遇到了一个问题,我不确定如何解决它。我正在处理的项目目前有一个模型,该模型部分包括后端存储的数据和来自本地数据库的数据。 所以我想要存档的是这样的:

文章:[信息束]& [boolean Subscribed]

订阅字段是设备绑定的,不应反映后端的任何数据。我的问题是,是否可以在Room中实现某种处理以下情况的createIfNotExit()方法:

  • 本地不存在的文章:存储副本并设置订阅 假的
  • 文章目前:更新所有信息并保留 订阅 - 标记未触动

我的想法是将模型拆分为一个单独的订阅模型,其中包含对文章的引用。这样我就可以通过@Query等来实现它......

有没有办法在DAO中实现一个执行我想要的简单var obj = [ { key1: 'value1' }, { key2: 'value2' }, { key3: 'value3' }, { key4: 'value4' } ], keysArray = []; obj.forEach((item)=>{ for(key in item){ keysArray.push(key); } }); console.log(keysArray);方法?

很抱歉,如果这是一个非常基本的问题,但我找不到任何有关处理此案例的最佳做法的材料。

提前谢谢!

1 个答案:

答案 0 :(得分:3)

例如,您的实体是:

@Entity(tableName = "articles")
public final class Article {
    @PrimaryKey
    public long serverId;
    public String title;
    public String url;

    public boolean isSubscribed;
}

您可以在DAO中编写此方法:

@Query("INSERT OR REPLACE INTO articles (serverId, title, url, isSubscribed) VALUES (:id, :title, :url,
    COALESCE((SELECT isSubscribed FROM articles WHERE id = :id), 0));")
void insertOrUpdateArticle(long id, String title, String url);

另一种选择 - 在您的存储库中编写此逻辑并使用两个简单的操作:选择和更新