有没有人知道是否可以使用Sugar ORM对列进行求和?我试图找到任何文档,并且有一个原始查询方法,但是,原始查询方法没有任何返回值。
示例:"从atable"
中选择总和(价格)Class.executeQuery()无效。
在存在这种功能(以及JOIN等)之前,糖ORM似乎不太可用。
答案 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
自定义queries
到database
非常容易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将每一栏都大写。