Interrogation de la valeur max d'une colonne en SQLite pour Android

j'ai une base de données créée et déposée avec les données. Il y a une colonne où je veux trouver la plus grande valeur.

C'est la méthode utilisée dans mon adaptateur de base de données :

public Cursor getBiggestInTheColumn() {
    return db.query(DATABASE_TABLE, null,
                    "MAX(price)", null, null, null, null);
}

Il devrait fonctionner, mais lorsque j'appelle la méthode :

        cursor = dbadp.getBiggestInTheColumn();

J'obtiens une erreur D'exécution comme ceci (LogCat):

07-14 12:38:51.852: ERROR / AndroidRuntime (276): causé par: android.la base de données.sqlite.SQLiteException: abus de la fonction aggregate MAX ():, alors que compilation: SELECT * FROM spendings WHERE MAX (price)

des idées? Je suppose que c'est à cause de la mauvaise requête, mais c'est le mieux que je peux venir avec. Les autres requêtes fonctionnent bien.

25
demandé sur ilcredo 2011-07-14 16:52:59

6 réponses

si vous voulez juste la plus grande valeur alors vous voulez L'équivalent SQL de: SELECT MAX(price) FROM spendings.

j'ai tendance à utiliser db.rawQuery(String sql, String[] selectionArgs), de sorte qu'il serait: db.rawQuery("SELECT MAX(price) FROM spendings", null).

Mais je pense que vous pouvez le faire avec db.query(DATABASE_TABLE, new String [] {"MAX(price)"}, null, null, null, null, null);. Bien que je n'ai pas testé.

50
répondu stephendnicholas 2011-07-14 13:05:31

une Autre façon d'obtenir la colonne pourrait être de créer la requête au maximum d'une colonne particulière, par exemple:

db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price))", null, null, null, null)

le curseur qui retourne sera la ligne de prix la plus élevée de la base de données.

9
répondu user1060576 2012-09-03 21:39:05

veuillez écrire la requête select max(price) as price from table name.

curseur résultant suivre l'instruction

cursor.getString(cursor.getColumnIndex("price"));
7
répondu user2783798 2013-09-16 19:26:39
 public Cursor select(String sql)
{
    try
    {
        Cursor cursor = mDataBase.rawQuery(sql,null);
        return cursor;
    }
    catch (SQLException mSQLException)
    {
        throw mSQLException;
    }
}
and 

l'appeler comme:

 Cursor cursor = dal.select("SELECT Max(id) FROM terms"); //where en like '"+name+"%'");
if (cursor != null) {
    cursor.moveToFirst();
   int id= cursor.getInt(0);}
3
répondu Hossin Gholami 2015-09-07 09:21:46

J'ai le même problème avec Android. Et " db.rawQuery (String sql, String[] selectionArgs), donc ce serait: db.rawQuery("SELECT MAX(prix) DE dépenses", null) throw Exception.

j'ai corrigé par:

db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price) FROM + DATABASE_TABLE + ")", null, null, null, null)

le curseur qui retourne sera la ligne de prix la plus élevée de la base de données. Il fonctionne correctement.

0
répondu MaksymDovbnia 2014-09-17 12:17:36

si vous voulez obtenir la valeur max d'une colonne dans une TABLE vous pouvez utiliser cette méthode

    public String getMax( String TABLE_NAME, String column_name) {// use the data type of the column
            database.open();
            Cursor cursor = database.query(TABLE_NAME, new String[]{"MAX(" +column_name + ") AS MAX"}, null, null, null, null, null);
            cursor.moveToFirst(); // to move the cursor to first record
            int index = cursor.getColumnIndex("MAX");
            String data = cursor.getString(index);// use the data type of the column or use String itself you can parse it 
            database.close();
            return data;
    }

si vous voulez obtenir l'enregistrement entier contenant la valeur max pour la colonne

    public List<Object> getMaxRecord(String TABLE_NAME, String column_name) {
            database.open();
            Cursor cursor = database.query(TABLE_NAME, new String[]{"*"}, column_name + " = " + "(SELECT MAX(" + column_name + ") FROM " + TABLE_NAME + ")", null, null, null, null);
            List<Object> demos = cursorToModel(cursor);
            database.close();
            return demos;
    }

note: cursorToModel est une méthode pour obtenir la liste des enregistrements dans le curseur satisfaisant la contrainte

0
répondu Katta Naresh 2016-04-21 06:31:14