android– 房间 – 插入或替换,但保留数据库字段?

android– 房间 – 插入或替换,但保留数据库字段?,第1张

概述我在我的本地数据库中有一个名为event的表,其中包含以下字段:> id(PK)>姓名(文字)>日期(时间)>收藏夹(int,0或1)服务器会给我一个事件列表,没有收藏字段,最喜欢的字段只是本地的.我正在使用此代码插入事件@Insert(onConflict = OnConflictStrategy.REPLACE) void ins

我在我的本地数据库中有一个名为event的表,其中包含以下字段:

> ID(PK)
>姓名(文字)
>日期(时间)
>收藏夹(int,0或1)

服务器会给我一个事件列表,没有收藏字段,最喜欢的字段只是本地的.

我正在使用此代码插入事件

@Insert(onConflict = OnConflictStrategy.REPLACE)voID insertEvents(List

问题是,如果一个事件已经存储在本地数据库中,它将丢失最喜欢的属性,并且在插入和替换之后它将始终为false.

有没有办法像这样批量插入,但保留最喜欢的字段?

最佳答案我有同样的情况.这就是我解决它的方式.
由于来自服务器的数据是不可变的并且会重置本地值,因此我决定为来自服务器的数据和另一个用于“本地”数据的数据保留一个表.

用于远程数据的表ServerData.

表ServerDataAttrs表示仅本地数据.

ServerDataAttrs包含所有本地列以及表ServerData中的主键ID.

ServerData.ID == ServerDataAttrs.ID

这样,ServerDataAttrs中的每一行都与ServerData中的对应行相关(另一种方式不需要,这就是我以后使用left JOIN的原因).您始终可以替换ServerData上的数据,ServerDataAttrs中的本地数据将保持不变.

我没有设置外键以避免意外删除.我只在从DAO调用delete方法时删除了本地数据.

要查询数据,您可以创建一个包含所有远程和本地值的POJO.

public class ServerDataWithAttrsPojo {   private long ID;   private String name;   ...   private int favorite;   // public constructor,getters and setters...}

然后查询必须是两个表之间的JOIN.

SELECT sd.ID,sd.name,....,sda.favoriteFROM ServerData sd left JOIN ServerDataAttrs sda ON sd.ID = sda.ID

我使用left JOIN,以防ServerData中的实体在ServerDataAttrs中没有像我之前提到的那样. 总结

以上是内存溢出为你收集整理的android – 房间 – 插入或替换,但保留数据库字段?全部内容,希望文章能够帮你解决android – 房间 – 插入或替换,但保留数据库字段?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1139550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)