ORMLite — вернуть элемент с максимальным идентификатором (или значением)

StackOverflow https://stackoverflow.com/questions/8970221

  •  12-11-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

Очевидно, что если бы ваш столбец был другого типа, вы бы получили другой объект из result[0] что вам придется преобразовать в соответствующий тип в зависимости от объекта.

Другие советы

Ааа, после дальнейшего обзора документации Ormlite, похоже, я хочу что-то вроде Это :

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();
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top