如何在 SQLite 中搜索相似的字符串

Zak*_*efi 6 sqlite string search android

我想在 cloumn“COLUMN_TITLE”中搜索表“TABLE_TOURS”中与“query”相似的词,并返回一个列表“List”。帮帮我吧

public List<Tour> getWordMatches(String query, String[] columns) {
    String selection =  ToursDBOpenHelper.COLUMN_TITLE + " MATCH ?";
    String[] selectionArgs = new String[] {query+"*"};
    return query(selection, selectionArgs, columns);
}
public List<Tour> query(String selection, String[] selectionArgs, String[] columns) {
    Log.i(LOGTAG, "getwordsmatches result"+ selection +" "+ selectionArgs);
    SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
    builder.setTables(ToursDBOpenHelper.TABLE_TOURS);

    Cursor cursor = builder.query(dbhelper.getReadableDatabase(),
            columns, selection, selectionArgs, null, null, null);
    Log.i(LOGTAG, "cursor of db result "+ cursor);
    List<Tour> tours = cursorToList(cursor);
    Log.i(LOGTAG, "tours are "+ tours);
    if (cursor == null) {
        return null;
    } else if (!cursor.moveToFirst()) {
        cursor.close();
        return null;
    }
    return tours;
}
Run Code Online (Sandbox Code Playgroud)

及其 cursorToList 方法:

private List<Tour> cursorToList(Cursor cursor) {
    List<Tour> tours = new ArrayList<Tour>();
    if (cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            Tour tour = new Tour();
            tour.setId(cursor.getLong(cursor.getColumnIndex(ToursDBOpenHelper.COLUMN_ID)));
            tour.setTitle(cursor.getString(cursor.getColumnIndex(ToursDBOpenHelper.COLUMN_TITLE)));
            tour.setCate(cursor.getString(cursor.getColumnIndex(ToursDBOpenHelper.COLUMN_CATE)));
            tour.setDetail(cursor.getString(cursor.getColumnIndex(ToursDBOpenHelper.COLUMN_DETAIL)));
            tour.setDescription(cursor.getString(cursor.getColumnIndex(ToursDBOpenHelper.COLUMN_DESC)));
            tour.setImage(cursor.getString(cursor.getColumnIndex(ToursDBOpenHelper.COLUMN_IMAGE)));
            tours.add(tour);
        }
    }
    return tours;
}
Run Code Online (Sandbox Code Playgroud)

Nat*_*ers 3

为此,您可以使用 SQL LIKE 语句。在 SQL 中,% 字符表示任何包含 0 个或多个字符的字符串。因此,例如,你可以写

SELECT * FROM MY_TABLE WHERE COLUMN_NAME LIKE '%dog%'
Run Code Online (Sandbox Code Playgroud)

这将匹配任何包含“dog”的字符串,例如“dog”、“dogs”、“I like dogs”和“123dog321”。

您的确切参数会根据表的结构而有所不同,但这就是要点。