ORMLite中的多个组合OR条件
我喜欢这样的查询:
select data from table where (x > 1 and x < 100)
or (x > 250 and x < 300)
在ORMlite中,可以使用以下代码:
final QueryBuilder<Data,Integer> qb = queryBuilder();final Where<Data, Integer> w = qb.where();
w.or(
w.gt("x", 1).and().lt("x", 100),
w.gt("x", 250).and().lt("x", 300)
)
如果可以事先知道条件,并且在编码时就可以了,那么我需要动态添加条件。
基本上,这种方法public com.j256.ormlite.stmt.Where<T,ID>
or(com.j256.ormlite.stmt.Where<T,ID> left, com.j256.ormlite.stmt.Where<T,ID>
right, com.j256.ormlite.stmt.Where<T,ID>...
others)是不够的。它需要其他or
支持的方法ArrayList
的Where
条件。
感谢您的任何建议。
回答:
如果可以事先知道条件,并且在编码时就可以了,那么我需要动态添加条件。
在ORMLite Where.or(Where<T, ID> left, Where<T, ID>
right, Where<T, ID>... others)中有一点语法上的缺陷。您打电话的时候:
w.or( w.gt("x", 1).and().lt("x", 100),
w.gt("x", 250).and().lt("x", 300)
);
该or()
方法得到的是:
w.or(w, w);
您确实可以将其重写为:
w.gt("x", 1).and().lt("x", 100);w.gt("x", 250).and().lt("x", 300);
w.or(w, w);
or
那里的方法仅使用参数来计算它需要从堆栈中弹出多少个子句。当你打电话gt
,并lt
和其他人,其在推的条款堆项目。该and()
方法从堆栈中取出1个项目,然后在将来取出另一个项目。我们进行这些语法修改是因为我们要支持基于线性,链接和参数的查询:
w.gt("x", 1);w.and();
w.lt("x", 100);
与:
w.gt("x", 1).and().lt("x", 100);
与:
w.and(w.gt("x", 1), w.lt("x", 100));
但这意味着您可以使用Where.or(int many)方法极大地简化代码。因此,在or
上面的示例中还可以是:
w.gt("x", 1).and().lt("x", 100);w.gt("x", 250).and().lt("x", 300);
// create an OR statement from the last 2 clauses on the stack
w.or(2);
因此,您根本不需要conditions
列表。您只需要一个柜台。因此,您可以执行以下操作:
int clauseC = 0;for (int i : values) {
if (i == 1) {
w.le(C_PREIS, 1000);
clauseC++;
} else if (i == 2) {
w.gt(C_PREIS, 1000).and().le(C_PREIS, 2500);
clauseC++;
} else if (i == 3) {
w.gt(C_PREIS, 2500).and().le(C_PREIS, 5000);
clauseC++;
} else if (i == 4) {
w.gt(C_PREIS, 5000).and().le(C_PREIS, 10000);
clauseC++;
} else if (i == 5) {
w.gt(C_PREIS, 10000);
clauseC++;
}
}
// create one big OR(...) statement with all of the clauses pushed above
if (clauseC > 1) {
w.or(clauseC);
}
如果i
只能是1到5,则可以使用values.size()
并跳过clauseC
。请注意,如果仅添加一个子句,则可以OR
完全跳过方法调用。
哦,下面的语句将 无法 正常工作:
target.or().raw(first.getStatement());
因为target
和first
是同一对象。 first.getStatement()
转储WHERE
我认为不是您想要的整个SQL 子句。
以上是 ORMLite中的多个组合OR条件 的全部内容, 来源链接: utcz.com/qa/406644.html