SQL查询错误或缺少数据库使用LIKE查询显示语法错误

时间:2019-03-10 23:45:18

标签: sqlite kotlin

我有一个语法错误,我不知道该如何解决。这是代码:

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 个答案:

答案 0 :(得分:1)

您需要将LIKE子句的参数用单引号引起来。

例如val searchString = "'% $searchStringRaw %'"

但是,最好使用 rawQuery 方法的第二个参数传递参数,在这种情况下,它们将被正确地转义,并且具有防止SQL注入的优点。 / p>

答案 1 :(得分:0)

感谢@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
}

它现在可以完美运行