如何从DAO获取OnConflictStrategy返回值

时间:2019-06-04 06:46:26

标签: android android-room dao

我正在使用Room Persistence Library。该操作按预期工作。但是我如何从调用方法的DAO中获取onConflict值。我收到以下错误

error: Not sure how to handle insert method's return type.

更新 将返回类型从Integer更改为long后,出现此错误

Not sure how to handle update method's return type. Currently the supported return types are void, int or Int.

DAO.java

@Dao
public interface UserDao {

    @Insert(onConflict = OnConflictStrategy.ABORT)
    long insert(UserEntity userEntity);

    @Update(onConflict = OnConflictStrategy.IGNORE)
    long update(UserEntity userEntity);
}

MainActivity.java

@Override
    protected Void doInBackground(UserEntity... userEntities) {
        long result = userDao.insert(userEntities[0]);
        if(result == OnConflictStrategy.ABORT){
            result = userDao.update(userEntities[0]);

        }
        return null;
    }

2 个答案:

答案 0 :(得分:1)

ConflictStrategy.ABORT的情况下,房间会抛出SQLiteConstraintException。您可以找到适合自己的用例。

您遇到的编译错误是由于@Insert操作只能返回longlong[]void而引起的。 Integer不会。

@Update将返回查询更新的行数。此方法将返回intvoid。 Doc:https://www.sqlite.org/lang_update.html

答案 1 :(得分:0)

插入 如果@Insert方法仅接收1个参数,则它可以返回long,它是插入项的新rowId。如果参数是数组或集合,则应返回long []或List。

更新 尽管通常没有必要,但是您可以让此方法返回一个int值,以指示数据库中更新的行数。

经过多次阅读,我理解这些方法返回的是记录数,而不是错误代码。无论如何,关于如何读取或使用OnConflictStrategy值的问题仍然没有答案