在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