3

我的应用程序包含搜索功能,它将搜索数据库内的内容。我搜索的弱点是,我只能使用一个标签进行搜索,例如我只能搜索“cat”,它会在我的数据库中返回包含单词“cat”的内容,因为我LIKE在 select 语句期间使用查询。如何使用多个标签进行搜索?例如“带黄球的猫”。这样,它将返回与插入的字符串相关的结果,如果数据库中不存在某些标签,它将忽略。为了更清楚,我AboutCat在我的数据库中创建了一个示例表。它包含 3 列,即 id、c_question 和 c_keyword。

编号 = 1

c_question = 如果我们拉猫的胡子会发生什么?

c_keyword = 猫胡子拉

如果我使用列中的任何关键字进行搜索,c_keyword例如“cat”或“cat mustache”或“mustache pull”,它将显示c_question。但如果我搜索“猫拉”或“小胡子猫”,它就不会显示。那么,我如何通过忽略单词的顺序来搜索它,只要它匹配并存在于 c_keyword 列中?下面是我的代码...问我我的解释是否不清楚..

btnWanita.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            results.clear();

            if(txtWnta.getText().toString().matches(""))
            {
                Toast.makeText(WanitaActivity.this, "Sila masukkan kata kunci", Toast.LENGTH_SHORT).show();

            }

            else
            {
            OpenHelper helper = new OpenHelper(getApplicationContext());
            database = helper.getWritableDatabase();

            try{                    

                String sql = "select * from " +
                            OpenHelper.DB_TABLE_WANITA + " where " + OpenHelper.KEY_WANITA +
                            " like " + "'%" + txtWnta.getText().toString() + "%';";
                Cursor c = database.rawQuery(sql, null);

                if(c!= null)
                {
                    c.moveToFirst();
                    int soalanColumn = c.getColumnIndex(OpenHelper.MASALAH_WANITA);
                    int getId = c.getColumnIndex(OpenHelper.ID_WANITA);
                    if(c.isFirst())
                    {
                        do
                        {
                            idList.add(c.getLong(getId));
                            results.add(c.getString(soalanColumn));


                        }while(c.moveToNext());
                    }

                    adapter.updateList(results);
                }

            }

                catch(SQLException e)
                {
                    Log.v("caer ", e.toString());   
                }
            }

我的搜索在这里...

String sql = "select * from " +
                            OpenHelper.DB_TABLE_WANITA + " where " + OpenHelper.KEY_WANITA +
                            " like " + "'%" + txtWnta.getText().toString() + "%';";
4

1 回答 1

2

您需要将字符串拆分为单独的单词,然后动态构建 WHERE 子句以匹配每个单词。像这样的东西:

String sql = 
"select * from " 
+ OpenHelper.DB_TABLE_WANITA 
+ " where " 
+ OpenHelper.KEY_WANITA + " like " + "'%cat%'" 
+ " or "
+ OpenHelper.KEY_WANITA + " like " + "'%mustache%'"
+ " or "
+ OpenHelper.KEY_WANITA + " like " + "'%pull%'"
+";"
;
于 2013-02-28T17:34:52.180 回答