我们不敢相信我们在问这个问题!
我们如何查询一个SQLite数据库的一条记录?
说我们想要ID,但只知道表中的名称
以下是调用数据库的代码
btnGetID.setOnClickListener {
val dbManager = DBHelper(this)
val name = etPerson.text.toString()
dbManager.getOneName(name)
println("##################### where is return"+empName)
}
这是数据库有趣的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没有运气
答案 0 :(得分:2)
例如
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
中的 $colName
和"SELECT * FROM $TABLE_NAME WHERE $colName = ?"
在调用之前被替换,并变成像"SELECT * FROM persons WHERE name = ?"
这样的常规字符串。
然后运行db.rawQuery
,第二个参数用于提供实际的查询参数。
selectionArgs
–您可以在查询的where子句中包含?s,它将替换为selectionArgs中的值。这些值将绑定为字符串。
不要"SELECT * FROM $TABLE_NAME WHERE $colName = '$name'"
或little Bobby来咬你