首页 > 解决方案 > 插入原始查询后 SQLite 生成的 id

问题描述

之前在这里问过这个问题,我选择了一个答案,但它不起作用,我生成的 id 为 0。这个问题基于最后给出的答案。

接受的答案使用 long id = db.insert(...); 由 android 提供,但我想知道为什么我们不能从原始查询中获取生成的 id?

fun save(): Long {
    val sql = "INSERT INTO user(first, last) VALUES(?, ?)"
    connection.writableDatabase.rawQuery(sql, arrayOf("John", "Doe")).use {
        connection.writableDatabase.rawQuery("SELECT last_insert_rowid()", null).use {
            return if (it.moveToNext()) it.getLong(0) else 0
        }
    }
}

编辑

我意识到了一些事情,问题出在这个语句上,即使moveToNext是真的,这总是返回 0,任何 kotlin 专家都可以建议吗?

return if (it.moveToNext()) it.getLong(0) else 0

我应该使用三元运算符,但这里的问题是什么?

标签: androidsqlitekotlin

解决方案


rawQuery()在您移动结果之前,它本身不会执行查询Cursor

改为用于execSQL()不返回结果的 SQL,例如INSERT.


推荐阅读