J'ai créé et archivé une base de données avec des 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);
}
Cela devrait fonctionner mais quand j'appelle la méthode:
cursor = dbadp.getBiggestInTheColumn();
J'obtiens une erreur d'exécution comme celle-ci (LogCat):
07-14 12: 38: 51.852: ERREUR/AndroidRuntime (276): Causé par: Android.database.sqlite.SQLiteException: mauvaise utilisation de la fonction d'agrégation MAX ():, lors de la compilation: SELECT * FROM dépenses WHERE MAX (prix)
Des idées? Je soupçonne que cela est dû à la mauvaise requête, mais c'est le meilleur que je puisse trouver. D'autres requêtes fonctionnent bien.
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)
, donc ce 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'aie pas testé cela.
Une autre façon d'obtenir la colonne pourrait être de définir 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 revient sera la ligne de prix la plus élevée de la base de données.
veuillez écrire la requête sous la forme select max(price) as price from table name
.
le curseur résultant suit l'instruction ci-dessous
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
appelez-le 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 sous Android. Et `db.rawQuery (String sql, String [] selectionArgs), ce serait donc: db.rawQuery (" SELECT MAX (prix) FROM dépenses ", null) - throw Exception.
J'ai réparé par:
db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price) FROM + DATABASE_TABLE + ")", null, null, null, null)
Le curseur qui revient sera la ligne de prix la plus élevée de la base de données. Cela fonctionne correctement.
Si vous souhaitez obtenir la valeur maximale 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 souhaitez obtenir l'enregistrement complet contenant la valeur maximale de 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