在Android上的Sqlite中执行LIKE查询

时间:2012-12-01 23:44:39

标签: android sqlite

我正在研究android项目,我需要在SQLITE中执行类似的查询,即 SELECT * FROM table WHERE column LIKE %value%

以下是我用来尝试构建查询的代码。

myDB = context.openOrCreateDatabase("PasswordManager", Context.MODE_PRIVATE, null);
            String[] columns = new String[]{"*"};
            if (searchType == SearchType.App)
            {
                where = "appName like ?";
            }
            else if (searchType == SearchType.Username)
            {
                where = "username like ?";
            }
            else if (searchType == SearchType.Name)
            {
                where = "company like ?";
            }

            String[] args = {"%" + searchTerm + "%"};
            cursor = myDB.query("password", columns, where, args, null, null, null);

出于某种原因,如果我尝试搜索一个模板,这不会返回任何结果但是如果我搜索整个字符串,它会找到一些东西。例如,如果我有值Hello World并执行搜索Hello,则不会返回任何内容,如果我搜索Hello World,则会得到结果。

我不明白为什么这不起作用。我尝试在搜索字词周围添加和删除%符号,但没有任何区别。

感谢您提供的任何帮助。

更新 我已经尝试过dymmeh所说的但这似乎没有用。以下是我尝试的代码。

myDB = context.openOrCreateDatabase("PasswordManager", Context.MODE_PRIVATE, null);
            String[] columns = new String[]{"*"};
            if (searchType == SearchType.App)
            {
                where = "appName like %" + searchTerm + "%";
            }
            else if (searchType == SearchType.Username)
            {
                where = "username like %" + searchTerm + "%";
            }
            else if (searchType == SearchType.Name)
            {
                where = "company like %" + searchTerm + "%";
            }

            //String[] args = {"%" + searchTerm + "%"};
            cursor = myDB.query("password", columns, where, null, null, null, null);

使用上面的代码现在崩溃应用程序,我尝试在单引号中包围%searchTerm%,这会阻止应用程序崩溃,但我得到原始问题,如果我搜索确切的字符串,结果如果我搜索字符串的一部分,我发现,我没有得到任何结果。

2 个答案:

答案 0 :(得分:2)

使用like ..

时,请勿使用select参数

而只是做

where = "appName like '%" + searchTerm + "%'";

只需为null

传递args即可

答案 1 :(得分:0)

我不太了解sqlite,但我很确定当你使用预备语句时,它会将%'解释为查询字符串的一部分。

您可能想尝试类似

的内容
select * from myTable where myField like concat('%', ?, '%')

但我不知道它是否有用。