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.
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é.
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.
veuillez écrire la requête select max(price) as price from table name
.
curseur résultant suivre l'instruction
cursor.getString(cursor.getColumnIndex("price"));
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);}
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.
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