0

我正在开发 android 项目,我需要在 SQLITE ie 中执行类似的查询 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 % 括在单引号中,这会阻止应用程序崩溃,但我遇到的原始问题是,如果我搜索确切的字符串,则会找到结果我搜索字符串的一部分,我没有得到任何结果。

4

2 回答 2

2

使用时不要使用选择参数like..

相反,只是做

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

而只是传递null给你args

于 2012-12-01T23:49:23.090 回答
0

我不太了解 sqlite,但我很确定当您以您的方式使用准备好的语句时,它会将 % 解释为查询字符串的一部分。

您可能想尝试类似的东西

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

但我不知道它是否会起作用。

于 2012-12-01T23:50:45.947 回答