android - 如何在 SQLite 查询中使用通配符?

标签 android sqlite android-sqlite

我正在尝试获取包含特定字符串的数据,但查询不起作用,以下是获取数据的方法。

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/

相关文章:

android - 行为树与状态机

android - 翻译动画后按钮不响应单击事件

android - IllegalStateException 与 ListActivity

android - 以 su/root 身份打开任何 SQLiteDatabase

android - 将 BarChartActivity 更改为 StackedBarActivity

android - css max-device-width 800 与安卓手机不匹配

Android Arraylist 项目 id

sqlite - 如何使用 SQLite JDBC 传递文本或字符串?

android - CREATE TABLE 中的 FOREIGN KEY 语法错误

Android - 将 Cursor 数据放入 HashMap 以加快数据检索