Запрос максимального значения столбца в SQLite для Android
У меня есть база данных, созданная и зарегистрированная с данными. Есть столбец, где я хочу найти самое большое значение.
Это метод, используемый в моем адаптере базы данных:
public Cursor getBiggestInTheColumn() {
return db.query(DATABASE_TABLE, null,
"MAX(price)", null, null, null, null);
}
Он должен работать, но когда я вызываю метод:
cursor = dbadp.getBiggestInTheColumn();
Я получаю Runtime Error Like This (LogCat):
07-14 12: 38: 51.852: ERROR/AndroidRuntime (276): вызвано: android.database.sqlite.SQLiteException: неправильное использование агрегатной функции MAX():, при компиляции: SELECT * FROM расходов WHERE MAX (цена )
Любые идеи? Я подозреваю, что это связано с плохим запросом, но это лучшее, что я могу придумать. Другие запросы работают хорошо.
Ответы
Ответ 1
Если вам просто нужно самое большое значение, вам нужен эквивалент 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);
. Хотя я не тестировал это.
Ответ 2
Другой способ получить столбец может состоять в том, чтобы задать запрос для максимального числа определенного столбца, например:
db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price))", null, null, null, null)
Возвращаемый курсор будет самой высокой ценой в базе данных.
Ответ 3
пожалуйста, напишите запрос как select max(price) as price from table name
.
приведенный курсор следует за приведенным ниже выражением
cursor.getString(cursor.getColumnIndex("price"));
Ответ 4
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);}
Ответ 5
У меня такая же проблема в Android.
И `db.rawQuery(String sql, String [] selectionArgs), поэтому это будет: db.rawQuery( "SELECT MAX (цена) FROM расходов", null) - throw Исключение.
I фиксировано:
db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price) FROM + DATABASE_TABLE + ")", null, null, null, null)
Возвращаемый курсор будет самой высокой ценой в базе данных. Он работает правильно.
Ответ 6
Если вы хотите получить максимальное значение столбца в TABLE, вы можете использовать этот метод
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;
}
note: cursorToModel - это метод для получения списка записей в курсоре, удовлетворяющем ограничению