在SQLite For Android中查询列的最大值

在SQLite For Android中查询列的最大值,android,sqlite,Android,Sqlite,我创建了一个数据库,并将数据归档。有一列我想找到最大值 这是我的数据库适配器中使用的方法: public Cursor getBiggestInTheColumn() { return db.query(DATABASE_TABLE, null, "MAX(price)", null, null, null, null); } 它应该可以工作,但当我调用该方法时: cursor = dbadp.getBiggestInTheCol

我创建了一个数据库,并将数据归档。有一列我想找到最大值

这是我的数据库适配器中使用的方法:

public Cursor getBiggestInTheColumn() {
    return db.query(DATABASE_TABLE, null,
                    "MAX(price)", null, null, null, null);
}
它应该可以工作,但当我调用该方法时:

        cursor = dbadp.getBiggestInTheColumn();
我得到一个运行时错误,如ThisLogCat:


07-14 12:38:51.852:错误/AndroidRuntime276:原因:android.database.sqlite.SQLiteException:编译时滥用聚合函数MAX:,从支出中选择*其中MAXprice


有什么想法吗?我怀疑这是由于错误的查询,但这是我能想出的最好的答案。其他查询工作正常。

如果您只需要最大的值,那么您需要SQL等价物: 从spendings中选择MAXprice

我倾向于使用db.rawQueryString sql,String[]selectionArgs,因此应该是:db.rawQuerySELECT MAXprice FROM spendings,null


但我认为可以使用db.queryDATABASE_TABLE、新字符串[]{MAXprice}、null、null、null、null;来实现这一点;。尽管我还没有对此进行测试。

获取列的另一种方法是将查询设置为特定列的最大值,例如:

db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price))", null, null, null, null)
返回的光标将是数据库中的最高价格行

请将查询写入select maxprice as price from table name

结果游标跟随下面的语句

cursor.getString(cursor.getColumnIndex("price"));

我在Android上也有同样的问题。 和`db.rawQueryString sql,String[]selectionArgs,所以它应该是:db.rawQuerySELECT MAXprice FROM spendings,null-throw Exception

我的修正案如下:

db.query(DATABASE_TABLE, null, "price=(SELECT MAX(price) FROM + DATABASE_TABLE + ")", null, null, null, null)
返回的光标将是数据库中的最高价格行。它工作正常

 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);}

若要获取表中某列的最大值,可以使用此方法

    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是一种获取游标中满足约束的记录列表的方法

如果只需要最大整数值,则可以使用以下方法:

public int getBiggestInTheColumn() {
    return (int) DatabaseUtils.longForQuery(db, "SELECT MAX(price) FROM " + DATABASE_TABLE, null);
}
DatabaseUtils添加到Android API 1中

公共静态longForQuery SQLiteDatabase数据库, 字符串查询, 字符串[]selectionArgs

在数据库上运行查询并返回第一行第一列中的值的实用方法


我尝试了“db.rawQuerySELECT MAXprice FROM spendings,null”,但它只是将错误更改为:error/AndroidRuntime335:由以下原因引起:android.database.CursorIndexOutOfBoundsException:请求索引-1,大小为1。虽然我觉得这是正确的选择。需要检查rawQuery方法。当您尝试使用游标获取数据时,是否出现异常?如果是这样,听起来您需要将光标定位到第一行,然后才能从中获取数据。为此,您可以调用:mCursor.moveToFirst。此外,此方法调用返回一个布尔值,如果没有结果,该值将为false;所以你也可以用它来防范这种情况。经过两个小时的努力,这条评论解决了我的问题。使用前将光标移动到第一条记录。人们总是忘记了.select方法在另一个类DAL中,而从DAL创建对象dalI不得不添加cursor.moveToFirst;在获取实际值使其工作之前,QliteException:滥用聚合:最大代码1