我有一个语法错误,我不知道该如何解决。这是代码:
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%)
我看不到语法错误。任何帮助将不胜感激。
答案 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
}
它现在可以完美运行