我的应用程序包含搜索功能,它将搜索数据库中的内容。我的搜索的弱点是,我可以使用一个标签进行搜索,例如我只能搜索“cat”,它将返回我的数据库中包含单词'cat'的内容,因为我正在使用LIKE
select语句中的查询。如何使用许多标签进行搜索?例如“带黄色球的猫”。这样,它将返回与插入的字符串相关的结果,如果数据库中不存在某些标记,它将忽略。为了更清楚,我在我的数据库中创建了一个示例表AboutCat
。它包含3列,即id,c_question和c_keyword。
id = 1
c_question =如果我们拉猫的小胡子会怎么样?
c_keyword = cat mustache pull
如果我使用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() + "%';";
答案 0 :(得分: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%'"
+";"
;