sqlite запрос "kotlin" для одной записи - PullRequest
0 голосов
/ 30 сентября 2018

Мы не можем поверить, что мы задаем этот вопрос!Как мы запрашиваем базу данных SQLite для одной записи?

Скажем, мы хотим идентификатор, но знаем только имя в таблице

Вот код, который делает вызов в БД

        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 = ""

}

Мы хотели бы ввести имя и получить идентификаторМы даже не можем получить имя.Мы делали это несколько раз на Java, но без удачи с Kotlin

1 Ответ

0 голосов
/ 30 сентября 2018

Например, как

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 - Вы можете включить? S в предложении where взапрос, который будет заменен значениями из selectionArgs.Значения будут связаны в виде строк.

Не делайте "SELECT * FROM $TABLE_NAME WHERE $colName = '$name'" или маленький Бобби придет вас укусить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...