当前位置: 首页 > 知识库问答 >
问题:

检查是否将行插入Room数据库

锺离穆冉
2023-03-14

我正在将行插入房间数据库,我想检查该行是否已成功插入。

这是我的刀

@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。

请建议这种方法是否正确?基本上,如果插入不成功,我想阻止用户继续

谢谢你的建议和意见

共有2个答案

南门峰
2023-03-14

您可以使用这样的数据库调试库

张溪叠
2023-03-14

根据这里的医生刀室@插入

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

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

  1. 单个插入操作的长值

如果返回值是-1或负,考虑操作失败,根据DOCS。

编辑回答@patrick。埃尔姆奎斯特评论

从房间生成的代码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();
 类似资料:
  • 我是一个拥有ROOM,RXJava和Android的新手。 在Android应用程序测试中,REST服务检索用户列表。如果用户已经存在,则必须修改此列表。如果该用户不存在,则将该用户插入到数据库中。如果用户已经存在,则不插入该用户。 在活动中的验证如下: Iserdao consiste en lo Siguiente: El UserRepository contiene lo siguient

  • 问题内容: 我正在将数据有问题地插入表中。当我从另一个表执行此操作时,它很快,但如果有很多记录,则只会非常缓慢地放慢速度。即使那样,也只需要几秒钟。 当我从查询插入到表时,它需要花费几分钟的时间-大约每插入1000条记录需要一分钟。 源查询本身仅作为选择查询运行时,可能需要1-2秒。查询是否针对插入的每个记录运行?我希望它会在整个数据集中运行一次。还是有其他原因导致该函数与从另一个表插入“平面”数

  • 在这种情况下,我希望返回,但当我执行代码时,它会引发一个异常,并带有以下消息: 提供的值为空 我不能使用,因为Dao返回的是,所以应该返回相同的类型。 在不改变DAO的情况下,如何检查用户是否存在?

  • 问题内容: 我正在将数据插入MySQL数据库,以防万一如果插入失败,我需要给出一条适当的错误消息来指示。根据下面的代码,如果插入成功或失败,我将收到消息。 我要做的是仅在数据插入成功时才回显消息,如果失败则返回。我该如何修改我的代码? 问题答案:

  • 我正在使用PHP、HTML5和JavaScript。 我正在制作一个网页(将链接到数据库)。我试图检查标签中是否有输入,这是可行的,但当点击按钮时,即使标签中没有输入,它也会转到下一页并发送数据。 在输入所有标签之前,您应该一直停留在页面上。它还提供了一条有效的错误消息。 我是否可以在javascript中插入一些内容,以便它转到下一页并发送数据(如method=“GET”) 我以前从来没有将数据

  • 问题内容: 我在做一个用用java Postgres的。有什么方法可以确定是插入行还是更新行? 问题答案: 您可以查看“系统”列来说明不同之处。在这种情况下,它用于插入的行。 这是建立在未记录的实现细节上的,该细节在将来的版本中可能会更改(即使可能性不大)。它适用于Postgres 9.5和9.6。 它的优点:您无需引入其他列。