【发布时间】:2017-10-24 17:16:48
【问题描述】:
我在应用程序中使用 Android 的 Room 库进行数据库交互,但我对如何防止重复条目插入数据库感到有点困惑。
我觉得我一定错过了一些东西,因为这看起来应该很简单。我在 Google 上搜索了与该主题相关的各种单词组合,但均无济于事。
我实际上是在使用其中一个示例进行插入和查询。
实体:
@Entity(tableName = "cameras")
public class CameraEntity {
@PrimaryKey(autoGenerate = true)
private int id;
private Integer accountId;
private Integer dvrId;
private String vendorId;
...
}
DAO:
@Dao
public interface CameraDao {
@Query("SELECT * FROM cameras")
Flowable<List<CameraEntity>> getCameras();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(List<CameraEntity> values);
}
就 Room 库而言,有什么方法可以设置一些关于何时插入数据的规则?我读过的一篇文章提到,自动增量 ID 导致每个项目在主键方面都是唯一的。如果这是真的,那么使用这个库的其他人是如何解释这一点的?
谢谢!
【问题讨论】:
-
“自动增量 ID 导致每个项目在主键方面都是唯一的”——正确。 “如何防止重复条目被插入到数据库中”——你如何定义“重复条目”?我们无法知道,部分原因是您的
CameraEntity列表已被编辑。 -
好点。为了讨论,我添加了更多字段。我会将重复条目定义为具有匹配 vendorId 的任何内容(在本例中为字符串)。
-
然后将其设为主键。或者,添加a unique index。
-
@CommonsWare 太棒了,唯一索引似乎可以解决问题!谢谢!我想这将是我错过的一些简单的事情。
标签: android sqlite rx-java2 android-room