Pergunta

Estou usando ORMLite com Android.Quero pegar o valor do ID do objeto com o ID de maior valor.

Também gostaria de generalizar isso para solicitar um único objeto com valor máximo/mínimo para qualquer campo arbitrário.Qual é a melhor prática para fazer isso?

Sei que poderia executar uma consulta bruta, mas existe alguma outra maneira que chame a atenção de alguém?Estou imaginando algo semelhante aos Predicados ao executar FetchRequests em CoreData no iOS.

Foi útil?

Solução

Sua resposta parece boa, @Ben, mas pensei em fornecer algumas informações extras para a posteridade:

  1. Você poderia usar um queryForFirst se você conhece o seu limit(1) retornará um único resultado.

    qBuilder.orderby("my_field_column_name", false);
    qBuilder.limit(1L);
    MyEntity maxEntity = myEntityDao.queryForFirst(qBuilder.prepare());
    
  2. Uma consulta bruta também funcionaria.Envolve mais objetos e verificação, mas será mais barato se o tamanho da mesa for grande, pois você não precisa fazer o pedido.

    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]);
    

Obviamente, se sua coluna fosse de um tipo diferente, você obteria um objeto diferente de result[0] que você teria que converter no tipo apropriado dependendo do objeto.

Outras dicas

Ahh, após uma análise mais aprofundada da documentação do ORMLite, parece que quero algo como esse:

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top