android 检查行是否插入到房间数据库中

h79rfbju  于 2022-12-31  发布在  Android
关注(0)|答案(3)|浏览(171)

我正在向房间数据库中插入行,我想检查该行是否插入成功。
这是我的刀

@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,然后将其成功插入到DB中吗?

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

e0uiprwp

e0uiprwp1#

根据此处的文件,Dao室@插入
如果@Insert方法只接收1个参数,则它可以返回一个long值,即插入项的新rowId。如果该参数是数组或集合,则它应返回long[]或List。
底线是,用@Insert标注的方法可以返回:
1.单个插入操作的长值。

  1. long[]或Long[]或List,用于多个插入操作。
    1.如果您不关心插入的id,则返回void。
    如果返回值为-1或负数,则根据文档,认为操作失败。

编辑回复@帕特里克.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();
webghufk

webghufk2#

当通过DAO向sqlite数据库插入数据时,它发出一个值。如果成功插入行,它发出它的rowID(如果是一个行列表,它发出rowID数组)

如果不成功,则发出-1(长)

djmepvbi

djmepvbi3#

您可以使用类似this one的数据库调试库

相关问题