OrmLite:建立不在和/或条件周围的地方

时间:2015-04-12 10:38:36

标签: java android sql ormlite

我想在OrmLite中表达以下SQL-Query:

SELECT * FROM table WHERE NOT (number1 = 0 AND number2 = 0)

这里的问题是在非操作中包装和AND条件。

  • 我的第一个假设是写:

    queryBuilder().
       where().not()
          .eq("number1", 0)
          .and()
          .eq("number2", 0);
    

    结果:

    SELECT * FROM table WHERE ((NOT number1 = 0 ) AND number2 = 0)
    
  • 下一步:

    queryBuilder().
       where().not()
          .eq("number1", 0)
          .and().not()
          .eq("number2", 0);
    

    结果:

    SELECT * FROM table WHERE ((NOT number1 = 0 ) AND (NOT number2 = 0) )
    
  • 最后我尝试了:

    queryBuilder.where()
       .not(
          where.eq(DbProperties.COLUMN_NAME_GROUP_ID, item.groupId)
             .and().eq(DbProperties.COLUMN_NAME_TASK_ID, item.taskId)
       );
    

    结果:

    IllegalArgumentException: NOT operation can only work with comparison SQL clauses
    

我也知道方法

and(int numClause) 
or(int numClause)

但OrmLite不提供

not(int numClause).

有人可以采用另一种方式来构建查询吗?

1 个答案:

答案 0 :(得分:0)

SELECT * FROM table WHERE NOT (number1 = 0 AND number2 = 0)

相当于

SELECT * FROM table WHERE ((NOT number1 = 0 ) OR (NOT number2 = 0) )  

,重新排列您的上一个查询将是:

queryBuilder().
   where()
      .not().eq("number1", 0)
      .or()
      .not().eq("number2", 0);