Создайте объект, который поддерживает функции поиска с несколькими вариантами комбинации для выбора пользователями. Следовательно, пользователи выбирают определенные параметры в поле поиска комбинации, правильный параметр должен проходить через отображение правильных списков результатов.QueryBuilder ormlite дает неверный результат
Однако результаты поиска неверны. Я фактически использую QueryBuilder: используя логику «AND» и «OR». Я понял, что в журнале последовательность «И» и «ИЛИ» смешивается. Показан следующий журнал:
02-06 17: 29: 15.891: I/-------------------- PropertySearchActivity ------ -------------- (31850): SELECT * FROM
property
WHERE ((((propertyCity
LIKE 'China' ORpropertyCountry
LIKE 'China') ИpropertyName
LIKE '%%') ИpropertyType
LIKE 'Офис') ORpropertyType2
LIKE 'Офис' ИЛИ propertyType3
LIKE 'Офис') ИpropertyVisibility
= 'Опубликовано') ORDER BYpropertyName
Как видно в журнале, есть несколько '(' после 'WHERE' , прежде чем «propertyCity», во-вторых, мне нужно '(' перед инструкциями OR, чтобы правильный журнал должен быть:
02-06 17: 29: 15.891: I/---------------- ---- PropertySearchActivity -------------------- (31850): SELECT * FROM
property
WHERE (propertyCity
LIKE 'China' OR LIKE 'China') ИpropertyName
LIKE '%%' И (propertyType
КАК 'Офис' ИЛИ propertyType2
LIKE 'Офис' ИЛИ propertyType3
LIKE 'Офис' ) ИpropertyVisibility
= 'Издатель' ORDER BYpropertyName
Я приложил следующий код для вашего прочтения, pls assist. Спасибо.
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");
Вы не можете использовать '==' и '! =' Со строками. Вам нужно использовать '.equals()'. – Gray