How to search for similar rows in SQLite

I want to find the table "TABLE_TOURS" for similar words "query" in cloumn "COLUMN_TITLE" and return the list "List". helps me plzz

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;
}

and its cursorToList method:

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;
}
+4
source share
3 answers

You can use the SQL LIKE statement for this. In SQL, the% character represents any string of 0 or more characters. So for example, you could write

SELECT * FROM MY_TABLE WHERE COLUMN_NAME LIKE '%dog%'

This will match any string containing “dog,” such as “dog,” “dog,” “I like dogs,” and “123dog321.”

Your exact arguments will depend on the structure of your table, but that is the point.

+3

Like, , .

- Sqlite



: Cursor c = myDB.query(MY_DATABASE_TABLE, "songname","songname like ?" , new String[]{"%"+MATCH_STRING+"%"}, null,"SongHit", null);

+3

Your method that executes the request should look like this:

public List<Tour> findByTitle(String string) {

        String query;
        query = "SELECT * FROM tours WHERE title LIKE '%"+ string +"%'";
        Cursor cursor = database.rawQuery(query, null);
        Log.i(LOGTAG, "Returned " + cursor.getCount() + " rows");
        List<Tour> tours = cursorToList(cursor);
        return tours;
    }
}
+1
source

All Articles