ORMLite - вернуть элемент с максимальным идентификатором (или значением) - PullRequest
3 голосов
/ 23 января 2012

Я использую ORMLite с Android.Я хочу получить значение идентификатора объекта с самым высоким значением идентификатора.

Я также хотел бы обобщить это для запроса одного значения объекта w / max / min для любого произвольного поля.Каков наилучший способ сделать это?

Я понимаю, что мог бы выполнить необработанный запрос, но есть ли другой способ, который выпадает на кого-либо?Я представляю что-то похожее на Predicates при выполнении FetchRequests в CoreData на iOS.

Ответы [ 2 ]

14 голосов
/ 23 января 2012

Ваш ответ выглядит неплохо @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]);
    

Очевидно, если ваш столбец был другимзатем введите из 1011 * другой объект, который вам нужно будет преобразовать в соответствующий тип в зависимости от объекта.

2 голосов
/ 23 января 2012

Ааа, после дальнейшего просмотра документации 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();
...