[英]Check if row is inserted into Room database
我正在向 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。
请建议这种方法是否正确? 基本上,如果插入不成功,我想阻止用户继续操作
感谢您的建议输入R
根据此处的文档Room Dao @Insert
如果@Insert 方法只接收 1 个参数,它可以返回一个 long,即插入项的新 rowId。 如果参数是数组或集合,则应改为返回 long[] 或 List。
底线是,使用@Insert 批注的方法可以返回:
如果返回值为 -1 或负数,则根据docs考虑操作失败。
编辑回答@patrick.elmquist 评论
从房间生成的代码。 EntityInsertionAdapter
和SupportSQLiteStatement
/**
* Execute this SQL statement and return the ID of the row inserted due to this call.
* The SQL statement should be an INSERT for this to be a useful call.
*
* @return the row ID of the last row inserted, if this insert is successful. -1 otherwise.
*
* @throws android.database.SQLException If the SQL string is invalid for
* some reason
*/
long executeInsert();
通过 DAO 将数据插入 sqlite 数据库时,它会发出一个值。 如果该行插入成功,它会发出它的 rowID (如果它是一个行列表,它会发出 rowID 的数组)
如果不成功,它会发出 -1(长)
您可以使用数据库调试库像这样一个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.