我正在使用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;
}
答案 0 :(得分:1)
在ConflictStrategy.ABORT
的情况下,房间会抛出SQLiteConstraintException
。您可以找到适合自己的用例。
您遇到的编译错误是由于@Insert
操作只能返回long
,long[]
或void
而引起的。 Integer
不会。
@Update
将返回查询更新的行数。此方法将返回int
或void
。 Doc:https://www.sqlite.org/lang_update.html
答案 1 :(得分:0)
插入 如果@Insert方法仅接收1个参数,则它可以返回long,它是插入项的新rowId。如果参数是数组或集合,则应返回long []或List。
更新 尽管通常没有必要,但是您可以让此方法返回一个int值,以指示数据库中更新的行数。
经过多次阅读,我理解这些方法返回的是记录数,而不是错误代码。无论如何,关于如何读取或使用OnConflictStrategy值的问题仍然没有答案