android - 在 Android SQLite 搜索中搜索多列

标签 android sqlite

我有一个汽车 sqlite 数据库,其中一个表有 3 列:年份、品牌和型号。使用下面的查询,我可以搜索单个短语,如“ford”,它会显示所有福特结果,或者“1964”,我会得到那一年的所有汽车。但是“1964 ford”返回“未找到结果”- 或 null。如何修改查询以便我可以从所有 3 列输入搜索词,例如“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。

最佳答案

它不起作用的原因是您的 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);
}

关于android - 在 Android SQLite 搜索中搜索多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12517695/

相关文章:

android - java.lang.RuntimeException : eglSwapBuffers failed: EGL_SUCCESS

Java,MalformedChunkCodingException

android - 如何使用 Android SpannableString 和 MaskFilterSpan 按预期模糊 TextView 中的某些文本?

sqlite - 如何在Xamarin表单中使用SqLite?

sqlite - 将 SQLite 数据库转换为三重存储

java - 跨多个 Activity 的 Android 数据库

sqlite - sqlite大于comparison(>)似乎不适用于自定义类型

java - 如何将图像上传到 SQLite 数据库?

Android - Oauth2、AccountManager 和 Google : retrieve profile data

java - 在android中添加两个字节数组