创建一个支持SEARCH功能的活动,其中包含多个组合选项供用户选择。因此,用户在组合搜索字段中选择某些选项,正确的参数应该通过显示正确的结果列表。
然而,搜索结果是错误的。我实际上正在使用QueryBuilder:使用' AND'和'或者'逻辑。我所意识到的是,在日志中,' AND'和'或者'混淆了。显示以下日志:
02-06 17:29:15.891:I / -------------------- PropertySearchActivity --------------- -----(31850):SELECT * FROM
property
WHERE(((({propertyCity
LIKE' China' ORpropertyCountry
LIKE' China&# 39;)和propertyName
LIKE' %%')和propertyType
LIKE' Office')或propertyType2
LIKE' Office&# 39;或propertyType3
喜欢'办公室')和propertyVisibility
='已发布')订购propertyName
如日志中所示,有多个'('之后' WHERE',之前' propertyCity'其次,我需要' ('在OR语句前面,以便正确的日志应该是:
02-06 17:29:15.891:I / -------------------- PropertySearchActivity --------------- -----(31850):SELECT * FROM
property
WHERE(propertyCity
LIKE' China' ORpropertyCountry
LIKE' China')ANDpropertyName
喜欢' %%' AND (propertyType
LIKE' Office'或propertyType2
LIKE' Office' ORpropertyType3
LIKE' Office& #39; )和propertyVisibility
='已发布' ORDER BYpropertyName
我已附上以下代码供您阅读,请协助。谢谢。
try {
List<DbClassProperty> ls;
QueryBuilder<DbClassProperty, Integer> qb = ((RootActivity) getContext())
.getHelper().getDbClassPropertyDao().queryBuilder();
qb.orderBy("propertyName", true);
Where<DbClassProperty, Integer> wb = ((RootActivity) getContext())
.getHelper().getDbClassPropertyDao().queryBuilder().where();
if (countrySpin.getSelectedItem().toString() != "Country.City"){
wb.and(
wb.or (
wb.like("propertyCity", countrySpin.getSelectedItem().toString()),
wb.like("propertyCountry", countrySpin.getSelectedItem().toString())
),
(wb.like("propertyName","%" + nameEdit.getText().toString() + "%")
)
);
}else
wb.like("propertyName", "%" + nameEdit.getText().toString()+ "%");
if (typeSpin.getSelectedItem().toString() != " Type") {
wb.and()
.or(
wb.like("propertyType", typeSpin.getSelectedItem()
.toString()),
wb.like("propertyType2", typeSpin.getSelectedItem()
.toString()),
wb.like("propertyType3", typeSpin.getSelectedItem()
.toString())
);
}
wb.and().eq("propertyVisibility", "Published");
答案 0 :(得分:0)
解决:
if (countrySpin.getSelectedItem().toString() != "Country.City"){
wb.and(
wb.or (
wb.like("propertyCity", countrySpin.getSelectedItem().toString()),
wb.like("propertyCountry", countrySpin.getSelectedItem().toString())
),
(wb.like("propertyName","%" + nameEdit.getText().toString() + "%")
)
);
}else
wb.like("propertyName", "%" + nameEdit.getText().toString()+ "%");
if (typeSpin.getSelectedItem().toString() != " Type") {
wb.and(
wb.or (
wb.like("propertyType", typeSpin.getSelectedItem()
.toString()),
wb.like("propertyType2", typeSpin.getSelectedItem()
.toString()),
wb.like("propertyType3", typeSpin.getSelectedItem()
.toString())
),
wb.and().eq("propertyVisibility", "Published")
);
}
答案 1 :(得分:0)
首先,您无法使用==
和!=
来查看String
是否具有与其他String
相同的内容,您应该使用equals(...)
} 方法。 String
==
与另一个String
的唯一方法是,如果它们是同一个对象。
但是ORMLite似乎确实存在一个错误。当我把你的查询归结为你时,你正在做:
and(or(1, 2), 3)
and().or(4, 5, 6);
and().7
将“in-fix”查询表单(and()
)与参数查询表单(or(1 ,2)
)结合起来非常奇怪。如果您希望将and()
视为单个实体,则第一个or(4)
内的or(4, 5, 6)
会弹出。{/ p>
我会看到修复ORMLite是多么容易。
感谢。