【问题标题】:How to avoid duplicate data entry in a table in Room Db?如何避免 Room Db 表中重复数据输入?
【发布时间】:2018-09-24 13:28:55
【问题描述】:

我正在使用 RoomDb 将消息存储在使用房间数据库的设备中。每条消息都包含一个在服务器上存储消息时生成的唯一 ID。 当一条消息被下载并存储在 Room 数据库中时,如果我再次尝试下载该消息,它会再次被下载并保存到 Room 数据库中。

我尝试使用替换策略,但仍然不起作用

 @Insert(onConflict = OnConflictStrategy.REPLACE)
    void saveMessage(ArrayList<Message> messages);

上面的代码应该替换现有的消息,但它没有这样做。

消息模型如下所示。

public class Message {

    @Exclude
    @PrimaryKey(autoGenerate = true)
    public long _id;

    @Exclude
    @ColumnInfo(name = "messageId")
    public String id;

    @Exclude
    public boolean outbox;
    @Exclude
    public boolean pending;

    @Exclude
    public boolean draft;

    @Exclude
    @ColumnInfo(typeAffinity = ColumnInfo.BLOB)
    public byte[] thumbnail;
    @Exclude
    public boolean downloaded;
    @Exclude
    public boolean seen;
    @Exclude
    public boolean liked;
    @Exclude
    public boolean disliked;
    @Exclude
    public String path;     // Local attachment path

    @Exclude
    public String localFilePath; //Local attachment file path

    public String title;
    public String body;
    public String type;
    public String image;
    public String file;
    public String audio;
    public String video;


}

【问题讨论】:

    标签: java android sqlite android-room


    【解决方案1】:

    你必须像这样改变你的实体类

    在 Java 中

    @Entity(tableName = "chat_message_table", indices = @Index(value = {"messageId"}, unique = true))
    public class Message {
    ...
    }
    

    在 Kotlin 中

    @Entity(tableName = "chat_message_table", indices = [Index(value = ["messageId"], unique = true)])
    data class Message(@ColumnInfo(name = "messageId") val messageId: String) {
     @PrimaryKey(autoGenerate = true)
     var _Id: Int = 0
     ...
     }
    

    【讨论】:

      【解决方案2】:

      每次保存模型时,都需要在数据库中搜索它是否存在。搜索条件应该是显着的,可以找到唯一的消息。这里可以使用 messageId 作为搜索条件。如果存在,请更新它。如果没有,请创建新消息并插入。

      【讨论】:

      • 我正在寻找一个不需要做任何额外检查的解决方案,无论如何谢谢:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多