我有一个包含 23,000 个单词的数据库。我想让查询返回以特定搜索字符串开头的所有单词。看完sqlite LIKE problem in android我能够使用 LIKE 获得有效的查询。在这里:
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String [] sqlSelect = { KEY_WORD };
String sqlTables = TABLE_WORDS;
//String selection = KEY_FUZZYWORD + " =?"; // for an exact match
String selection = KEY_FUZZYWORD + " LIKE ?";
String[] selectionArgs = { searchString + "%" };
String limit = Integer.toString(WORD_QUERY_LIMIT);
qb.setTables(sqlTables);
Cursor cursor = qb.query(db, sqlSelect, selection, selectionArgs, null, null, null, limit);
重点是
String selection = KEY_FUZZYWORD + " LIKE ?";
String[] selectionArgs = { searchString + "%" };
但我也读了Why do we need the GLOB clause in SQLite?区分大小写适合我的情况,所以我想我会尝试一下。如何使用带有 selectionArgs 的 SQLiteQueryBuilder 进行设置?我很难找到一个例子。 (我不想使用 rawQuery 来避免 SQL 注入(inject)。)
最佳答案
它与您已有的非常相似。
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String [] sqlSelect = { KEY_WORD };
String sqlTables = TABLE_WORDS;
String selection = KEY_FUZZYWORD + " GLOB ?";
String[] selectionArgs = { searchString + "*" };
String limit = Integer.toString(WORD_QUERY_LIMIT);
qb.setTables(sqlTables);
Cursor cursor = qb.query(db, sqlSelect, selection, selectionArgs, null, null, null, limit);
重点是
String selection = KEY_FUZZYWORD + " GLOB ?";
String[] selectionArgs = { searchString + "*" };
进一步阅读:
- SQLite - GLOB Clause
- SQL As Understood By SQLite (向下滚动到“LIKE 和 GLOB 运算符”)
关于android - 如何在 android 中使用 glob 和 sqlite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29773891/