android - 插入原始查询后 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
我应该使用三元运算符,但这里的问题是什么?
解决方案
rawQuery()
在您移动结果之前,它本身不会执行查询Cursor
。
改为用于execSQL()
不返回结果的 SQL,例如INSERT
.
推荐阅读
- javascript - 如何使用 jQuery.javascript 触发 react-select 输入下拉菜单
- java - 即使我将 1 个数组的值存储到另一个数组中并将它们作为一个整体打印,但数组仍然会打印最后一个值
- google-cloud-storage - 与 GCSFUSE 但没有 gsutil 和 ftp 的 Google Storage Cloud 存储桶允许我上传文件
- php - PHP按值将数组拆分为2个数组
- java - java map获取与抽象类的子类不兼容的类型
- image - Img 源将 prop 传递给子组件 Vue Js
- swift - 如何从 Firebase 获取错误代码?
- asp.net - Rest Web Api XML 绑定 - Asp.Net MVC
- r - 如何使用 ggplot 创建两条线和散点图
- c# - WinForm中如何调用AppService