Android Sqlite Oprationation

Я хочу выполнить операцию поиска. Я использую CursorAdapter для отображения данных из базы данных. Вот мой код

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

Внутренняя деятельность

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

Ранее я мог искать данные только с Title, Теперь я хочу найти данные в соответствии с Title or keyword, Как видите мой запрос, попробовал с этим. Но это не работает. Потому что ничего не показывает.

2 ответа

Решение

Вы скучаете по , запятая и вам нужно сгруппировать ваше условие ИЛИ в скобках, потому что 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);

Я думаю, что у вас есть простая проблема приоритета, а в SQL приоритет выше, чем в OR. Я думаю, вы хотите, чтобы ваш SQL выглядел так:

where ABSTRACTS_ITEM._id = ABSTRACT_KEY_WORDS._id
  and (
        ABSTRACT_KEY_WORDS.KEYWORDS like '%' || ? || '%'
     or ABSTRACTS_ITEM.TITLE like '%' || ? || '%'
  )

Я также переключился на заполнители, так как использование конкатенации строк для сборки SQL слишком 1999 для меня. Это означает, что вы захотите использовать rawQuery(String sql, String\[\] selectionArgs) версия rawQuery,

Другие вопросы по тегам