Sqlite-以所需顺序显示结果

时间:2019-06-23 08:27:55

标签: android performance sqlite android-sqlite android-cursor

我创建了一个带有两列- Code Name 的sqlite表,并将数据存储在其中。向用户提供一个搜索视图以输入代码或名称,然后该应用程序将相应地显示结果。

我正在使用以下查询来获取结果-

cursor = db.query(TABLE_SEARCH, columns, COLUMN_CODE + " LIKE '" +
        searchText + "%' or " + COLUMN_ NAME + " LIKE '%" + searchText + "%'", null, null, null, null)

但是问题是,结果没有按预期的顺序显示。 我想按以下顺序显示结果-

1。在顶部显示代码与搜索到的文本完全匹配的结果。

2。在下面显示的结果中,名称与搜索到的文字完全匹配。

3。下面显示的是代码的搜索结果,以搜索到的文本开头。

4。在下面显示的结果中,名称包含搜索到的文本。

如果我运行多个sqlite查询,这会使搜索变慢。如何在不影响性能的情况下以最佳方式满足我的要求?

1 个答案:

答案 0 :(得分:1)

query()方法的最后一个参数是ORDER BY子句。
尝试条件排序:

cursor = db.query(
    TABLE_SEARCH, 
    columns, 
    COLUMN_CODE + " LIKE '" + searchText + "%' OR " + 
    COLUMN_ NAME + " LIKE '%" + searchText + "%'", 
    null, 
    null, 
    null, 
    "CASE " + 
    "WHEN " + COLUMN_CODE + " = '" + searchText + "' THEN 1 " +
    "WHEN " + COLUMN_ NAME + " = '" + searchText + "' THEN 2 " +
    "WHEN " + COLUMN_CODE + " LIKE '" + searchText + "%' THEN 3 " +
    "WHEN " + COLUMN_ NAME + " LIKE '%" + searchText + "%' THEN 4 " + 
    "END, " + COLUMN_CODE + ", " + COLUMN_ NAME
)

为了获得更好的性能,您应该为列COLUMN_CODECOLUMN_ NAME设置索引。
此外,通过串联这么多字符串,您可能会冒sql injection的风险。
希望您检查searchText是否包含单引号并将其更改为双引号,例如:

searchText = searchText.replace("'", "''");