我想执行搜索操作。我正在使用 CursorAdapter 显示数据库中的数据。这是我的代码
数据库助手
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;
}
内部 Activity
cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
return dbHelper.fetchDataByName(constraint.toString());
}
});
以前,我只能使用 Title
搜索数据。现在,我想要根据标题或关键字
搜索数据。正如你所看到的,我的查询,尝试过。但是,它不起作用。因为,它什么也没显示。
最佳答案
您缺少 ,
逗号,并且需要将 OR 条件分组在括号中,因为 AND
具有更高的优先级。
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);
关于java - Android Sqlite 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18778335/