我有一个cars sqlite数据库,其中一个表有3列:year、make和model。有了下面的查询,我可以搜索一个短语,如“福特”,它将显示所有福特的结果,或“1964年”,我将得到所有汽车从那一年。但是“1964 Ford”返回“未找到结果”-或空。如何修改查询,以便我可以从“1964福特野马”等所有3列中输入搜索词?是的,我知道没有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);
}
我试过用和代替+但那就崩溃了。我在用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);
}