在Android SQLite搜索中搜索多个列

时间:2012-09-20 17:24:54

标签: android sqlite

我有一个汽车sqlite数据库,其中一个表有3列:年份,品牌和型号。通过以下查询,我可以搜索单个短语,如“福特”,它将显示所有福特结果,或“1964”,我将获得当年的所有车辆。但是“1964 ford”返回“没有找到结果” - 或者为null。如何修改查询以便我可以从“1964 ford mustang”这三列中输入搜索词?是的,我知道1964年福特野马没有这样的东西,它是1964年的一半。但是在我的数据库中有1964年福特野马有一排,所以我们以“1966福特野马”为例。

    public Cursor searchDB(String query) {  
    return db.query(true, DB_TABLE, new String[] { KEY_ROWID, KEY_YEAR, KEY_MAKE, 
    KEY_MODEL }, KEY_YEAR + " LIKE" + "'%" + query + "%' OR " + KEY_MAKE +  
    " LIKE" + "'%" + query + "%' OR " + KEY_MODEL + " LIKE" + "'%" + query + "%'",  
    null, null, null, null, null);  
}

我尝试使用AND代替+但是崩溃了。我正在使用android 2.2。

1 个答案:

答案 0 :(得分:6)

它不起作用的原因是你的column LIKE %query%陈述。这就是说,该值必须完全包含您的查询,两端都有任意数量的字符。因此"1964" LIKE "%1964 mustang%"会失败,但"1964 mustang" LIKE "%1964%"会给你正确的结果。

如果您按空格拆分查询字符串并针对每个拆分字符串查询每个列,那么这可能会为您提供所需的结果。

更新:用于拆分字符串并形成查询的代码段。

public Cursor searchDB(String query) {
    /* Example: query = "1964 ford mustang" */

    String[] parts = query.split(" "); /* Should split to {"1964", "ford", "mustang"} */

    String queryString = "";
    for(int i = 0; i < parts.length; i++) {
        queryString += KEY_YEAR + " LIKE '%" + parts[i] + "%' OR ";
        queryString += KEY_MAKE + " LIKE '%" + parts[i] + "%' OR ";
        queryString += KEY_MODEL + " LIKE '%" + parts[i] + "%'";
        if(i != (parts.length - 1)) {
            queryString += " OR ";
        }
    }

    return db.query(true, DB_TABLE, 
        new String[] { KEY_ROWID, KEY_YEAR, KEY_MAKE, KEY_MODEL }, 
        queryString, null, null, null, null, null);
}