2015-01-06 3 views
1

설탕 ORM을 사용하여 열을 합산하는 것이 가능한지 아는 사람 있습니까? 모든 설명서를 찾으려고 노력했지만 원시 쿼리 메서드가 있지만 원시 쿼리 메서드에는 반환 값이 없습니다.설탕 ORM SUM 열

예 : 'ATABLE에서 선택 합 (가격) "

Class.executeQuery()는 무효이다.

설탕 ORM은 이러한 종류의 기능 (JOIN 등과 함께)이 존재할 때까지는 사용하지 않는 것 같습니다.

답변

2

나는 마지막으로 다음과 같은 코드로 수행

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

는 또한 보호했다 접근 (제대로 매니페스트를 수정하는 것을 잊지 마세요) 때문에 데이터베이스의 속성에 액세스 할 수 있습니다하는 응용 프로그램 클래스를 변경해야합니다.

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

희망이 있습니다. 위해 database

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

현재로서는 불가능합니다. 결국 greenDAO을 사용하여 끝내 었습니다. SQLiteDatabase 객체에 대한 액세스를 제공하는 훨씬 빠른 (리플렉션에 의존하지 않음) 솔루션으로 모든 종류의 사용자 정의 가능성을 가능하게했습니다.

+0

나는 정의도 쿼리 할 수 ​​없습니다와 함께, 설탕에 SUM에 열을 유사한 문제에 직면하고있어! http://satyan.github.io/sugar/query.html? –

+1

설탕 orm 짜증! 검색된 목록을 필터링하여이 총액 문제를 해결했습니다. http://stackoverflow.com/questions/25699131/sum-value-of-class-objects-property-in-arraylist –

2

당신은 반사에 의해 설탕 데이터베이스 개체에 액세스하여 원시 쿼리를 수행 할 수 있습니다 query받는 사람은 꽤 똑바로 앞으로 다음

SugarDb sugarDb = new SugarDb(context); 

: SUM에 또는 쿼리를 사용하여 다음과 같은 코드로 Database에 대한 액세스를 얻을 수 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이 우리 테이블의 이름을 지정하는 방식이므로 테이블을 호출 할 때 조심하십시오. 열 이름은 대문자로 방법


통지? 그 이유는 설탕 ORM이 각 열을 대문자로 쓰기 때문입니다.


+0

훌륭한 답변입니다! 이것은 받아 들여지는 것이어야합니다! 정말 고맙습니다! –

+0

위대한 대답이지만 설탕이 완전히 지원하지 않는 사용자 지정 쿼리와 같은 시나리오에서 이런 종류의 스타일을 코딩하는 안드로이드 기본 db를 사용하는 것이 더 좋다고 생각합니다. D –

1

대답은 너무 늦을 수도 있지만 새로운 올 사람을 도움이 될 것입니다, 그 아주 쉽게 사용자 정의 queryqueries에 :