Sugar ORM SUM 一列

Sugar ORM SUM a column

有谁知道是否可以使用 Sugar ORM 对列求和?我试图找到任何文档,并且有一个原始查询方法,但是,原始查询方法没有任何返回值。

示例:"select sum(price) from atable"

Class.executeQuery() 无效。

Sugar ORM 似乎不太有用,直到出现这种功能(连同 JOIN 等)。

目前看来不可能。我最终使用了 greenDAO,这是一种更快(不依赖于反射)的解决方案,它可以访问 SQLiteDatabase 对象,从而实现各种自定义可能性。

我终于用下面的代码做到了:

long sumValue = -1L;
Database db = ((Application)SugarApp.getSugarContext()).obtainDatabase();
SQLiteDatabase sqLiteDatabase = db.getDB();
SQLiteStatement sqLiteStatement = sqLiteDatabase.compileStatement(
    "SELECT SUM(column_name) FROM table_name");
try {
    sumValue = sqLiteStatement.simpleQueryForLong();
} catch (Exception var16) {
    var16.printStackTrace();
} finally {
    sqLiteStatement.close();
}

还需要将应用程序 class 更改为可以访问数据库 属性 因为访问受保护(不要忘记正确修改清单)。

public class Application extends SugarApp {    
    public Database obtainDatabase(){
        return getDatabase();
    }
}

希望对您有所帮助。

您可以通过反射访问 sugar 数据库对象来执行原始查询:

int sumValue = -1;
Field f = null;
try {
    f = SugarContext.getSugarContext().getClass().getDeclaredField("sugarDb");
    f.setAccessible(true);
    SugarDb db = (SugarDb) f.get(SugarContext.getSugarContext());
    Cursor cursor = db.getDB().
            rawQuery("Select Sum(COLUMN_NAME) as s from TABLE_NAME" , null);
    if (cursor.moveToFirst())
        sumValue = cursor.getInt(cursor.getColumnIndex("s"));
} catch (NoSuchFieldException e) {
    e.printStackTrace();
} catch (IllegalAccessException e) {
    e.printStackTrace();
}

答案可能为时已晚,但它会帮助新手,很容易 query 自定义 queriesdatabase 以便 SUM 或使用您可以通过以下代码访问 Database 的任何查询:

SugarDb sugarDb = new SugarDb(context);

然后它非常直接 query database 例如你可以做

    SQLiteDatabase database = sugarDb.getDB();
    SQLiteStatement query = database.compileStatement("SELECT SUM(AMOUNT) FROM EXPENSES_MODEL");
    try {
        total = query.simpleQueryForLong();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        query.close();
    }

notice the underscore in table name? its how Sugar ORM names our tables so please be careful when calling the table.


notice how the column name is capitalised? its because Sugar ORM capitalise each column.