Ошибка SQL-запроса или отсутствующая база данных показывает синтаксическую ошибку, используя LIKE-запрос - PullRequest
0 голосов
/ 11 марта 2019

У меня есть синтаксическая ошибка, которую я не знаю, как решить.Вот код:

fun allSearchData(searchStringRaw: String): Cursor{
    val searchString = "% $searchStringRaw %"
    val query = "Select * from $MARKER_TABLE where $KEY_NAME like $searchString"
    val c = mySpotsDatabase!!.rawQuery(query, null)
    c.moveToFirst()
    return c
}

, и он дает мне эту ошибку:

 Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
    (near "%": syntax error (code 1): , while compiling: Select * from my_locations_table where Name like % h %)

Если я удаляю пробелы следующим образом, это не имеет значения.

val searchString = "%$searchStringRaw%"

и это просто изменяет строку ошибки на следующую, так что я знаю, что это не пробел в строке:

 (near "%": syntax error (code 1): , while compiling: Select * from my_locations_table where Name like %h%)

Я не вижу синтаксическую ошибку.Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Вам необходимо заключить аргумент для предложения LIKE в одинарные кавычки.

например, val searchString = "'% $searchStringRaw %'"

Однако лучше использовать второй параметр rawQuery. метод передачи аргументов, в этом случае они будут правильно экранированы, и вы получите преимущество защиты от SQL-инъекций.

0 голосов
/ 11 марта 2019

Спасибо @MikeT, который увидел проблему.Вот правильный код:

fun allSearchData(searchStringRaw: String): Cursor{
    val searchString = "'%$searchStringRaw%'"
    val query = "Select * from $MARKER_TABLE where $KEY_NAME like $searchString"
    val c = mySpotsDatabase!!.rawQuery(query, null)
    c.moveToFirst()
    return c
}

Теперь он отлично работает

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