Search code examples
javaandroiddatabaseandroid-sqliteandroid-cursoradapter

Android Sqlite Oprationation


I want perform a search operation.I am using CursorAdapter to show data from database.Here is my code

DBHelper

public Cursor fetchDataByName(String string) {
        // TODO Auto-generated method stub

        Cursor cursor = database.rawQuery("select  ABSTRACTS_ITEM._id,ABSTRACTS_ITEM.TITLE,ABSTRACTS_ITEM.TOPIC, "
                + "ABSTRACTS_ITEM.TYPE,ABSTRACTS_ITEM.TEXT"
                + "ABSTRACT_KEY_WORDS.KEYWORDS "
                + "from ABSTRACTS_ITEM,ABSTRACT_KEY_WORDS "
                + "where ABSTRACTS_ITEM._id = ABSTRACT_KEY_WORDS._id "
                + "and ABSTRACT_KEY_WORDS.KEYWORDS like '%" + string + "%'"
                + "or ABSTRACTS_ITEM.TITLE like '%" + string + "%'", null);
        return cursor;
    }

Inside Activity

cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
            public Cursor runQuery(CharSequence constraint) {
                return dbHelper.fetchDataByName(constraint.toString());
            }
        });

Previously, I can search data only with Title. Now, I want search data according to Title or keyword. As you can see my query, tried with that. But, it's not working.Because, it shows nothing.


Solution

  • You're missing a , comma and you need to group your OR condition in brackets because AND has a higher precedence.

    Cursor cursor = database.rawQuery("select ABSTRACTS_ITEM._id, "
            + "ABSTRACTS_ITEM.TITLE, ABSTRACTS_ITEM.TOPIC, "
            + "ABSTRACTS_ITEM.TYPE, ABSTRACTS_ITEM.TEXT, " // <-- Comma needed
            + "ABSTRACT_KEY_WORDS.KEYWORDS "
            + "from ABSTRACTS_ITEM,ABSTRACT_KEY_WORDS "
            + "where ABSTRACTS_ITEM._id = ABSTRACT_KEY_WORDS._id "
              // Group the OR condition with "()"; AND has higher precedence
            + "and (ABSTRACT_KEY_WORDS.KEYWORDS like '%" + string + "%' "
            + "or ABSTRACTS_ITEM.TITLE like '%" + string + "%')", null);