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.
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);