【发布时间】:2020-10-23 11:03:39
【问题描述】:
我正在向 Room 数据库插入行,我想检查该行是否插入成功。
这是我的道
@Insert()
suspend fun insertOfflineData(offlineData: OfflineData): Long
@Entity
data class OfflineData(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
@ColumnInfo(name = "request_info_json")
val requestInfoJson: String
)
当我插入一行时,响应是 1,2,3 等等..
所以它返回的是id(对吗?)
所以要检查行是否插入正确。
我可以检查插入的 rowId 是否大于 0,然后它已成功插入数据库。
private suspend fun insertOfflineData(offlineDataRequestInfo: String): Long {
var result: Long = 0
result = OfflineDatabaseManager.getInstance(app.applicationContext).insertOfflineData(
OfflineData(
0,
offlineDataRequestInfo
))
if(result > 0 ) {
//SUCCEFFLULLY INSERTED
} else {
//UNSUCCESSFULL
}
return result
}
注意:我得到的结果是 1、2、3 等,应该是 rowId。
请建议这种方法是否正确? 基本上,如果插入不成功,我想阻止用户进一步进行
感谢您的建议和意见 回复
【问题讨论】:
-
AFAIK,当新行添加到 db 时,Room 将始终返回该行的 primaryKey 值,即 Long。如果您选择
autoGenerate=trueroom 将生成它,否则您必须指定它。 -
我要检查的是,如果结果 > 0,则表示房间成功插入了行,如果不是,则表示不成功。 ~这种方法在检查我的数据是否成功保存在房间里是否正确?
-
rowId
-
好吧,你的意思是这永远不会发生?
-
现在我不确定您期待什么样的失败,但您可以为插入指定冲突策略,如果它与冲突无关,我很确定会引发异常。我认为您不能根据 rowId 的值做出假设,除非您收到插入成功的值
标签: android kotlin android-room android-database suspend