Как отфильтровать поиск в базе данных по конкретному столбцу? - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь отфильтровать поиск в sqlite. Я хотел бы выбрать только те строки, которые имеют определенный аргумент в столбце.

с помощью следующего кода я получаю возврат всех строк через массив, построенный функцией queueAll ()

fun readFileFromSQLite (): ArrayList {

    var fileName = ArrayList<String>()

    var cursor = queueAll()

    if (cursor.moveToFirst()) {
        while (!cursor.isAfterLast) {
            //val name = cursor.getString(cursor.getColumnIndex(countyname))
            var message_uuid = cursor.getString(cursor.getColumnIndex(COL_y1))
            var message_time = cursor.getString(cursor.getColumnIndex(COL_y2))
            var message_from = cursor.getString(cursor.getColumnIndex(COL_y3))
            var message_to = cursor.getString(cursor.getColumnIndex(COL_y4))
            var message_subject = cursor.getString(cursor.getColumnIndex(COL_y5))
            var message_body = cursor.getString(cursor.getColumnIndex(COL_y6))

            fileName.add(message_body)
            cursor.moveToNext()
        }



        }
        cursor.close()

    return fileName
}

fun queueAll(): Cursor {
    val columns = arrayOf<String>("message_uuid", "message_time","message_from","message_to","message_subject","message_body")
    val db = readableDatabase

    val comp = "comprimido"
    return db.query(CHAT, columns,  null, null, null, null, null)
  //  return db.rawQuery("select * from CHAT where message_from=web_anon , null);
}

Теперь я хотел бы извлечь только те строки, в которых есть столбец message_from с определенной строкой. Моя попытка: return db.rawQuery ("select * from CHAT, где message_from = web_anon, null) возвращает ошибку

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Рекомендуемый способ использования rawQuery() следующий:

db.rawQuery("select * from CHAT where message_from= ?" , arrayOf("web_anon"))

2-й аргумент - это массив строк, передаваемых 1-му аргументу, который является самим запросом и каждым ? заполнитель заменяется каждым элементом массива.Таким образом, вам не нужно беспокоиться о типе данных столбцов, а также безопасно использовать sql-инъекции.

0 голосов
/ 03 июня 2019

Рабочая. Правильный выбор:

return db.rawQuery("select * from CHAT where message_from= 'web_anon' , null) с одинарными кавычками в аргументе.

Второй вариант - добавить это условие: if (message_from==web_anon) { filename.add(message_body)}

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