有谁知道是否可以使用 Sugar ORM 对列求和?我试图找到任何文档,并且有一个原始查询方法,但是,原始查询方法没有任何返回值。
示例:“从表中选择总和(价格)”
Class.executeQuery() 是无效的。
直到出现这种功能(以及 JOIN 等)之前,Sugar ORM 似乎并不是很有用。
我终于用下面的代码做到了:
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();
}
还需要将 Application 类更改为可以访问 DataBase 属性,因为具有受保护的访问权限(不要忘记正确修改清单)。
public class Application extends SugarApp {
public Database obtainDatabase(){
return getDatabase();
}
}
希望能帮助到你。
您可以通过反射访问糖数据库对象来执行原始查询:
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();
}
目前看来不可能。我最终改用了greenDAO,这是一种更快(不依赖于反射)的解决方案,它可以访问 SQLiteDatabase 对象,从而实现各种自定义可能性。
答案可能为时已晚,但它会帮助新来的人,它很容易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();
}
注意表名中的下划线?它是 Sugar ORM 命名我们的表的方式,因此在调用表时请小心。
注意列名是如何大写的?这是因为 Sugar ORM 将每一列都大写。