0

検索操作を実行したい.CursorAdapterを使用してデータベースからデータを表示しています.ここに私のコードがあります

DBヘルパー

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. 私のクエリを見るとわかるように、それを試してみました。しかし、それは機能していません。何も表示されないためです。

4

2 に答える 2

2

カンマがありません。優先順位が高い,ため、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);
于 2013-09-13T04:36:47.540 に答える
0

単純な優先順位の問題があると思います。SQL では、AND は 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

于 2013-09-13T04:38:13.173 に答える