【问题标题】:Android Sqlite OprationationAndroid Sqlite 操作
【发布时间】:2013-09-13 04:30:15
【问题描述】:

我要执行搜索操作。我正在使用 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;
    }

内部活动

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

以前,我只能使用Title 搜索数据。现在,我要根据Title or keyword 搜索数据。如您所见,我的查询已尝试过。但是,它不起作用。因为它什么也没显示。

【问题讨论】:

  • @Nambari 对不起,我没听明白。

标签: java android database android-sqlite android-cursoradapter


【解决方案1】:

您缺少, 逗号,您需要将您的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);

【讨论】:

    【解决方案2】:

    我认为你有一个简单的优先级问题,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

    【讨论】:

      猜你喜欢
      • 2017-10-25
      • 2011-08-26
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多