检查行是否插入到 Room 数据库中
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
你可以使用像this one
这样的数据库调试库
根据此处的文档 Room Dao @Insert
如果@Insert方法只接收1个参数,它可以return一个long,这是插入项的新rowId。如果参数是数组或集合,则应 return long[] 或 List 代替。
底线是,
用@Insert 注解注解的方法可以 return:
- 单个插入操作的长值。
- 用于多个插入操作的 long[] 或 Long[] 或 List。
- 如果您不关心插入的 ID,则作废。
如果 return 值为 -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();
我正在向 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
你可以使用像this one
这样的数据库调试库根据此处的文档 Room Dao @Insert
如果@Insert方法只接收1个参数,它可以return一个long,这是插入项的新rowId。如果参数是数组或集合,则应 return long[] 或 List 代替。
底线是, 用@Insert 注解注解的方法可以 return:
- 单个插入操作的长值。
- 用于多个插入操作的 long[] 或 Long[] 或 List。
- 如果您不关心插入的 ID,则作废。
如果 return 值为 -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();