ORMLite - 返回项目w /最大ID(或值)

时间:2012-01-23 10:29:23

标签: android ormlite

我正在使用带有Android的ORMLite。我想获取具有最高值ID的对象的ID值。

我还想将此概括为请求任意字段的具有最大/最小值的单个对象。这样做的最佳做法是什么?

我意识到我可以执行一个原始查询,但还有其他方式可以跳出来吗?我在iOS上的CoreData中执行FetchRequests时想象的类似于Predicates。

2 个答案:

答案 0 :(得分:14)

你的回答看起来不错@Ben但我想我会为后代提供一些额外的信息:

  1. 如果您知道queryForFirst将返回单个结果,则可以使用limit(1)

    qBuilder.orderby("my_field_column_name", false);
    qBuilder.limit(1L);
    MyEntity maxEntity = myEntityDao.queryForFirst(qBuilder.prepare());
    
  2. 原始查询也可以。它涉及更多的对象和检查,但如果表大小很大则会更便宜,因为您不需要进行排序。

    qBuilder.selectRaw("MAX(my_field_column_name)");
    GenericRawResults<String[]> results =
        myEntityDao.queryRaw(qBuilder.prepareStatementString());
    String[] result = results.getResults().next();
    int max = Integer.parseInt(result[0]);
    
  3. 显然,如果您的列是不同的类型,那么您将从result[0]中获得一个不同的对象,您必须根据对象将其转换为适当的类型。

答案 1 :(得分:2)

啊,在进一步审查ORMLite文档后,似乎我需要this之类的内容:

QueryBuilder<MyEntity,ItsIdType> qBuilder = myEntityDao.queryBuilder();
qBuilder.orderby("my_field_column_name",false); // false for descending order
qBuilder.limit(1);
List<MyEntity> listOfOne = qBuilder.query();