Sugar ORM SUM一列

时间:2015-01-06 12:01:13

标签: android sqlite sugarorm

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

示例:"从atable"

中选择总和(价格)

Class.executeQuery()无效。

在存在这种功能(以及JOIN等)之前,糖ORM似乎不太可用。

4 个答案:

答案 0 :(得分:3)

我最终使用以下代码执行此操作:

   [self.containerViewController willMoveToParentViewController:nil];  // 1   
   self.containerViewController.view removeFromSuperView];
   [self.containerViewController removeFromParentViewController];//this line is updated as view is removed from parent view cotnroller istead of its viewcontroller is removed from parentViewController 
   self.containerViewController = nil

还需要更改Application类才能访问DataBase属性,因为它具有受保护的访问权限(不要忘记正确修改清单)。

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

希望它有所帮助。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

答案可能为时已晚,但它会对新来者有所帮助,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();
    }
  

注意表名中的下划线?它是如何用糖ORM命名我们的表,所以在调用表时请小心。

  

注意列名是如何大写的?因为Sugar ORM将每一栏都大写。