ORMLite中的多个组合OR条件

ORMLite中的多个组合OR条件,第1张

ORMLite中的多个组合OR条件

如果可以事先知道条件,并且在编码时就可以了,那么我需要动态添加条件。

在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
那里的方法仅使用参数来计算它需要从堆栈中d出多少个子句。当你打电话
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 stackw.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 aboveif (clauseC > 1) {    w.or(clauseC);}

如果

i
只能是1到5,则可以使用
values.size()
并跳过
clauseC
。请注意,如果仅添加一个子句,则可以
OR
完全跳过方法调用。

哦,下面的语句将 无法 正常工作:

target.or().raw(first.getStatement());

因为

target
first
是同一对象。
first.getStatement()
转储
WHERe
我认为不是您想要的整个SQL 子句。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5164703.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存