我正在研究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%,这会阻止应用程序崩溃,但我得到原始问题,如果我搜索确切的字符串,结果如果我搜索字符串的一部分,我发现,我没有得到任何结果。
答案 0 :(得分:2)
使用like
..
而只是做
where = "appName like '%" + searchTerm + "%'";
只需为null
args
即可
答案 1 :(得分:0)
我不太了解sqlite,但我很确定当你使用预备语句时,它会将%'解释为查询字符串的一部分。
您可能想尝试类似
的内容select * from myTable where myField like concat('%', ?, '%')
但我不知道它是否有用。