对于更优雅的方式做到这一点,我建议两个选择:与IGNORE
检查返回值从insert
运营为OnConflictStrategy
(如果它等于-1,则意味着行不插入):
@Insert(onConflict = OnConflictStrategy.IGNORE)
long insert(Entity entity);
@Update(onConflict = OnConflictStrategy.IGNORE)
void update(Entity entity);
public void upsert(Entity entity) {
long id = insert(models);
if (id == -1) {
update(models);
}
}
处理例外从insert
操作与FAIL
作为OnConflictStrategy
:
@Insert(onConflict = OnConflictStrategy.FAIL)
void insert(Entity entity);
@Update(onConflict = OnConflictStrategy.FAIL)
void update(Entity entity);
public void upsert(Entity entity) {
try {
insert(entity);
} catch (SQLiteConstraintException exception) {
update(entity);
}
}
您可能想要使其效率更高并检查返回值。 -1表示任何类型的冲突。 – jcuypers