使用Android搜索对话框搜索多个DB列

使用Android搜索对话框搜索多个DB列,android,sqlite,search,dialog,Android,Sqlite,Search,Dialog,我已经让Android搜索对话框工作了,但我遇到的问题是我有一个3列DB表,我希望在其中搜索所有3列。以下方法仅对表的第1列执行搜索: //--- GET RECORDS FOR SEARCH public Cursor searchDB(String query) { String[] allColumns = new String[]{ KEY_COLUMN1, KEY_COLUMN2, KEY_COLUMN3 }; return db.query(true, DB_TABL

我已经让Android搜索对话框工作了,但我遇到的问题是我有一个3列DB表,我希望在其中搜索所有3列。以下方法仅对表的第1列执行搜索:

//--- GET RECORDS FOR SEARCH
public Cursor searchDB(String query) {
    String[] allColumns = new String[]{ KEY_COLUMN1, KEY_COLUMN2, KEY_COLUMN3 };
    return db.query(true, DB_TABLE, new String[] { KEY_ROWID,
            KEY_COLUMN1, KEY_COLUMN2, KEY_COLUMN3 }, KEY_COLUMN1 + " LIKE" + "'%"   + query + "%'", null, null, null, null, null);
}
//--- END Get Records for Search
因此,我尝试向查询添加一个字符串数组,如下所示:

//--- GET RECORDS FOR SEARCH
public Cursor searchDB(String query) {
    String[] allColumns = new String[]{ KEY_COLUMN1, KEY_COLUMN2, KEY_COLUMN3 };
    return db.query(true, DB_TABLE, new String[] { KEY_ROWID,
            KEY_COLUMN1, KEY_COLUMN2, KEY_COLUMN3 }, allColumns + " LIKE" + "'%"        + query + "%'", null, null, null, null, null);
}
//--- END Get Records for Search 
但这会使应用程序崩溃。那么如何修改该方法来搜索三列(Column1、Column2和Column3)?

您需要传递“Null”来代替“allColumns”。 这将搜索行中的所有列

您需要传递“Null”来代替“allColumns”。
allColumns + " LIKE" + "'%"        + query + "%'"
这将检查行中的所有列

allColumns + " LIKE" + "'%"        + query + "%'"
我想你需要试试这样的东西

column1 + " LIKE '%' AND "+column2        + " LIKE '%' AND " etc.,
注意:可能存在语法错误。这是手写的

我想你需要试试这样的东西

column1 + " LIKE '%' AND "+column2        + " LIKE '%' AND " etc.,
注意:可能存在语法错误。它是手工输入的。

您可以这样做(假设您希望所有行至少匹配一列):

您可以这样做(假设您希望所有行至少匹配一列):


传递null将导致搜索不返回任何内容。但是我知道你要做什么了……传递null会导致搜索不返回任何结果。但我明白你的想法了……我还在根据你的建议尝试组合。但查询不喜欢和。所以我尝试了KEY_COLUMN1+KEY_COLUMN2+KEY_COLUMN3+”像“+”'%“+query+“%”,结果应用程序崩溃了。不过我还在努力……我还在根据你的建议尝试组合。但查询不喜欢和。所以我尝试了KEY_COLUMN1+KEY_COLUMN2+KEY_COLUMN3+”像“+”'%“+query+“%”,结果应用程序崩溃了。但仍在努力。。。。。