繁体   English   中英

检查行是否插入到 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

根据此处的文档Room Dao @Insert

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

底线是,使用@Insert 批注的方法可以返回:

  1. 单个插入操作的长值。
  2. 用于多个插入操作的 long[] 或 Long[] 或 List。
  3. 如果您不关心插入的 id(s),则为 void。

如果返回值为 -1 或负数,则根据docs考虑操作失败。

编辑回答@patrick.elmquist 评论

从房间生成的代码。 EntityInsertionAdapterSupportSQLiteStatement

/**
     * 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM