使用ORMlite OR子句的异常

时间:2015-07-17 18:01:33

标签: android ormlite

我有一段时间试图在ORMLite中使用'或'子句,我得到以下例外:

-charset => 'utf-8'

我搜索了aroundRTFM,但我无法理解我做错了什么。我查看抛出异常的行,看起来堆栈是空的,因为它期待有什么东西存在。

我尝试过更改一下查询,所有三个示例如下:

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)

如何编写这个简单的查询?

2 个答案:

答案 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);