“kotlin”sqlite 查询一条记录
Posted
技术标签:
【中文标题】“kotlin”sqlite 查询一条记录【英文标题】:"kotlin" sqlite query for one record 【发布时间】:2018-09-30 20:15:51 【问题描述】:我们不敢相信我们会问这个问题! 我们如何在 SQLite 数据库中查询一条记录?
假设我们想要 id 但只知道表中的名称
这是调用数据库的代码
btnGetID.setOnClickListener
val dbManager = DBHelper(this)
val name = etPerson.text.toString()
dbManager.getOneName(name)
println("##################### where is return"+empName)
这里是 DB 有趣的 getOneName
fun getOneName(name: String): String
val db = this.writableDatabase
val selectQuery = "SELECT * FROM $TABLE_NAME WHERE $colName = name"
// val selectQuery = "SELECT * FROM $TABLE_NAME WHERE $colId = id"
val cursor = db.rawQuery(selectQuery, null)
var empName = ""
//var empID = 0
if (cursor.getCount() > 0)
cursor.moveToFirst()
empName = cursor.getString(cursor.getColumnIndex(colName))
//empID = cursor.getInt(cursor.getColumnIndex(colId))
cursor.close()
println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ID "+empName)
return empName
这个数据库有一个模型,应用有一个适配器
class Contact
var id: Int = 0
var name: String = ""
我们想输入名称并检索 id 我们甚至无法检索名称。 我们在 Java 中已经多次这样做了,但在 Kotlin 中没有运气
【问题讨论】:
【参考方案1】:比如喜欢
fun getOneName(name: String): Contact?
val db = this.writableDatabase
val selectQuery = "SELECT * FROM $TABLE_NAME WHERE $colName = ?"
db.rawQuery(selectQuery, arrayOf(name)).use // .use requires API 16
if (it.moveToFirst())
val result = Contact()
result.id = it.getInt(it.getColumnIndex(colId))
result.name = it.getString(it.getColumnIndex(colName))
return result
return null
并使用类似
btnGetID.setOnClickListener
val dbManager = DBHelper(this)
val name = etPerson.text.toString()
val contact = dbManager.getOneName(name)
println("##################### where is return"+contact?.name)
$TABLE_NAME
和"SELECT * FROM $TABLE_NAME WHERE $colName = ?"
中的$colName
在调用前被替换并变成像"SELECT * FROM persons WHERE name = ?"
这样的常规字符串。
然后db.rawQuery
运行,第二个参数用于提供您的实际查询参数。
selectionArgs
– 您可以在查询的 where 子句中包含 ?s,它将被 selectionArgs 中的值替换。这些值将绑定为字符串。
不要"SELECT * FROM $TABLE_NAME WHERE $colName = '$name'"
或little Bobby来咬你
【讨论】:
这太好了,我输入了名字并想取回 id 吗?这将花费我几个小时,相信我的小鲍比很快就会被书签不止一次地咬我 DUH etPerson.setText(contact?.id.toString()) ".use" 是从哪里来的 从来没有见过它和将 Java 转换为 Kotlin 的过程一定从未见过给出奇怪的结果 @Grendel.use
是添加到 Closable
的 Kotlin extension 函数。它本质上是 kotlin 的 try-with-resources:***.com/questions/26969800/… - 但是:Cursor
直到 api 级别 16 才实现 Closable
,因此在旧手机上运行时可能会崩溃。但是您也可以将该扩展功能添加到您自己的代码中:discuss.kotlinlang.org/t/why-cursor-use-does-not-compiles/5454/…以上是关于“kotlin”sqlite 查询一条记录的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin基础从入门到进阶系列讲解(入门篇)下载SQLite软件,如何创建/添加/更新/查询/删除数据
Kotlin基础从入门到进阶系列讲解(入门篇)下载SQLite软件,如何创建/添加/更新/查询/删除数据
eclipse-android开发过程中,将sqlite字段原值手工修改后,无法查询到关联的下一个表