我有一段时间试图在ORMLite中使用'或'子句,我得到以下例外:
-charset => 'utf-8'
我搜索了around和RTFM,但我无法理解我做错了什么。我查看抛出异常的行,看起来堆栈是空的,因为它期待有什么东西存在。
我尝试过更改一下查询,所有三个示例如下:
Caused by: java.lang.IllegalStateException: Expecting there to be a clause already defined for 'OR' operation
at com.j256.ormlite.stmt.Where.pop(Where.java:702)
at com.j256.ormlite.stmt.Where.or(Where.java:381)
如何编写这个简单的查询?
答案 0 :(得分:6)
你有答案,但我想我会为后代添加更多细节。 QueryBuilder.where()
method每次都会生成一个新的Where
对象。 ORMLite正在抛出异常,因为它只是看到最后一个where()
方法调用:
queryBuilder.where().or(3);
所以它没有看到任何其他like(...)
方法调用,因为它们是在不同的Where
对象上进行的。
如果查看building queries documentation,您可以看到模式是一次调用where()
,然后使用Where
对象构建SQL { {1}}条款:
WHERE
或者:
Where where = queryBuilder.where();
where.or(where.like(Contacts.FIELD_NAME_FIRST_NAME, nameFilter),
where.like(Contacts.FIELD_NAME_LAST_NAME, nameFilter),
where.like(Contacts.FIELD_NAME_PHONE_NUMBER, nameFilter));
或者:
Where where = queryBuilder.where();
where.like(Contacts.FIELD_NAME_FIRST_NAME, nameFilter);
where.or();
where.like(Contacts.FIELD_NAME_LAST_NAME, nameFilter);
where.or();
where.like(Contacts.FIELD_NAME_PHONE_NUMBER, nameFilter);
答案 1 :(得分:5)
正如@Selvin评论的那样,这解决了它:
Where where = queryBuilder.where();
where.like(Contacts.FIELD_NAME_FIRST_NAME, nameFilter);
where.like(Contacts.FIELD_NAME_LAST_NAME, nameFilter);
where.like(Contacts.FIELD_NAME_PHONE_NUMBER, nameFilter);
where.or(3);