【问题标题】:Multiple Query Condition in Android using ORMLITE使用 ORMLITE 在 Android 中的多个查询条件
【发布时间】:2014-05-17 15:59:35
【问题描述】:

我想做一个简单的查询,有多个条件

我使用 OrmLite 来映射实体对象。

现在我想在我的表中搜索一个对象。

假设我有一个映射 PERSON 表的 Person 实体,我要做的是用一些参数初始化一个对象并搜索它。

假设一个函数searchPerson(Person oPerson)

如果我像这样传递一个对象 OPerson

Id = null
Name = John
Age = null
Sex = male

是否可以编写查询来实现该目标?类似这样的伪代码

pers = (from p in db.Table<Person>() 
                     where (if OPerson.Id !=null) p.Id==OPerson.Id}
                     AND {(if OPerson.Name !=null) p.Name.Contains(OPerson.Name)}
                     AND {(if condition) where-contion}
                     select p).ToList();

我知道我可以通过这种方式进行多个查询

list=PersonDao.queryBuilder().where().eq("name",OPerson.name)
    .and().eq("sex",OPerson.sex").query();

但我也想检查该值是否存在

【问题讨论】:

    标签: android sqlite ormlite query-builder


    【解决方案1】:

    在哪里(如果 OPerson.Id !=null)p.Id==OPerson.Id}

    @ArghArgh 很接近,但没有正确的 AND。问题是 AND 语句取决于是否有任何先前的语句。我会做类似的事情:

    QueryBuilder<Person, Integer> queryBuilder = dao.queryBuilder();
    Where<Person, Integer> where = queryBuilder.where();
    int condCount = 0;
    if (oPerson.id != null) {
        where.eq("id", oPerson.id);
        condCount++;
    }
    if (oPerson.name != null) {
        where.like("name", "%" + oPerson.name + "%");
        condCount++;
    }
    ...
    // if we've added any conditions then and them all together
    if (condCount > 0) {
        where.and(condCount);
    }
    // do the query
    List<Persion> personList = queryBuilder.query();
    

    这利用了where.and(int) method,它将堆栈中的许多子句与它们之间的 AND 放在一起。

    【讨论】:

      【解决方案2】:

      我认为你必须使用 QueryBuilder。 试试这样的

      QueryBuilder<Person, Integer> queryBuilder = PersonDao.queryBuilder();
      // get the WHERE object to build our query
      Where<Person, String> where = queryBuilder.where();
      if(oPerson.Name!=null)
          where.like("Name", "%"+oPerson.Name+"%");
      // and
      where.and();
      if(Person.Sex!=null)
          where.like("Sex", "%"+oPerson.sex+"%");
      
      PreparedQuery<Person> preparedQuery = queryBuilder.prepare();
      

      你可以这样称呼它

      List<Person> list = PersontDao.query(preparedQuery);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-20
        • 2011-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多