我正在尝试获取包含特定字符串的数据,但查询不起作用,以下是获取数据的方法。
public Cursor getSearch(String item) {
SQLiteDatabase db = this.getReadableDatabase();
String mQuery = "SELECT * FROM hadiths WHERE text LIKE %"+item.toString()+"%";
Cursor cursor = db.rawQuery(mQuery, null);
return cursor;
}
Logcat 显示以下错误。
Caused by: android.database.sqlite.SQLiteException: near "%": syntax error (code 1): , while compiling: SELECT * FROM hadiths WHERE text LIKE %fast%
我知道通配符 %% 和字符串变量项会导致问题,但我如何将字符串变量与通配符一起使用?
最佳答案
编辑:
正如 Jiří 在下面提到的,应该使用参数来帮助防止 SQL 注入(inject)问题。
为了添加参数,你可以做类似这样的事情:
String mQuery = "SELECT * FROM hadiths WHERE text LIKE ?”;
String param1 = “%” + item + ”%”;
Cursor cursor = db.rawQuery(mQuery, new String [] {param1});
为了添加另一个参数:
String mQuery = "SELECT * FROM hadiths WHERE text LIKE ? AND Name = ?”;
String param1 = “%” + item + ”%”;
String param2 = name;
Cursor cursor = db.rawQuery(mQuery, new String [] {param1, param2});
这段代码有点繁琐,不过是为了说明参数必须按照加入query的顺序加入。
请参阅 SQLite 文档: https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase
此处为后代提供原始答案。警告危险的 SQL 注入(inject)问题!
您需要在查询中添加单引号。
String mQuery = "SELECT * FROM hadiths WHERE text LIKE '%"+item+"%'";
查看 SQLite 文档: https://www.tutorialspoint.com/sqlite/sqlite_like_clause.htm
注意:不需要使用 toString()
,因为“item”已经是 String
类型了。
关于android - 如何在 SQLite 查询中使用通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50157853/