Запрос максимального значения столбца в SQLite для Android
У меня есть база данных, созданная и заполненная данными. Есть столбец, в котором я хочу найти самую большую ценность.
Это метод, используемый в моем адаптере базы данных:
public Cursor getBiggestInTheColumn() {
return db.query(DATABASE_TABLE, null,
"MAX(price)", null, null, null, null);
}
Это должно работать, но когда я вызываю метод:
cursor = dbadp.getBiggestInTheColumn();
Я получаю такую ошибку во время выполнения (LogCat):
07-14 12:38:51.852: ошибка / AndroidRuntime (276): вызвано: android.база данных.базы данных SQLite.SQLiteException: неправильное использование агрегатной функции MAX ():, при компиляции: SELECT * FROM spendings Где MAX (price)
Есть идеи? Я подозреваю, что это связано с плохим запросом, но это лучшее, что я могу придумать. Другие запросы работают хорошо.
6 ответов:
Если вы просто хотите получить наибольшее значение, то вам нужен эквивалент SQL:
SELECT MAX(price) FROM spendings.Я склонен использовать
Но я думаю, что вы могли бы сделать это с помощьюdb.rawQuery(String sql, String[] selectionArgs), поэтому это будет:db.rawQuery("SELECT MAX(price) FROM spendings", null).db.query(DATABASE_TABLE, new String [] {"MAX(price)"}, null, null, null, null, null);. Хотя я этого не проверял.
Другой способ получить столбец может заключаться в том, чтобы установить запрос на максимум конкретного столбца, например:
db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price))", null, null, null, null)Возвращаемый курсор будет самой высокой строкой цены в базе данных.
Пожалуйста, напишите запрос как
select max(price) as price from table name.Результирующий курсор следует приведенному ниже выражению
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Назовем это так:
Cursor cursor = dal.select("SELECT Max(id) FROM terms"); //where en like '"+name+"%'"); if (cursor != null) { cursor.moveToFirst(); int id= cursor.getInt(0);}
У меня такая же проблема в Android. И " ДБ.rawQuery (String sql, String [] selectionArgs), так что это будет: db.rawQuery ("SELECT MAX (price) FROM spendings", null) - выбросить исключение.
Я исправил по:
db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price) FROM + DATABASE_TABLE + ")", null, null, null, null)Возвращаемый курсор будет самой высокой строкой цены в базе данных. Это работает правильно.
Если вы хотите получить максимальное значение столбца в таблице, вы можете использовать этот метод
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; }Если вы хотите получить всю запись, содержащую максимальное значение для столбца
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; }Примечание: cursorToModel-это метод получения списка записей в курсоре, удовлетворяющий ограничению
Comments