如何在android中使用带有sqlite的glob

时间:2015-04-21 13:40:26

标签: android sqlite glob sql-like

我有一个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注入。)

1 个答案:

答案 0 :(得分:2)

它与你已经非常相似。

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 + "*" };

进一步阅读: