Android数据库SQlite sum()在我的情况下不起作用?

时间:2017-07-30 07:15:11

标签: android sql sqlite android-sqlite aggregate-functions

我不知道我的代码有什么问题请在这里帮助我

            db = this.getReadableDatabase();
            String query = "SELECT SUM(" +COLUMN_AMOUNT+ ") FROM "+TABLE_NAME+";";
            Cursor cursor = db.rawQuery(query, null);
            double monthlyTotal = 0.110;
            if(cursor.moveToFirst())
            {
                monthlyTotal = cursor.getDouble(0);// get final total
            }
            else
                monthlyTotal = 0.110;

我总是得到monthlyTotal = 0.0,即使我已将其初始化为0.110

请检查我的onCrete()代码是否正确

public void onCreate(SQLiteDatabase db) {

String CREATE_MONTHS_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + COLUMN_ID + " INT, " + COLUMN_DATE + " TEXT, " + COLUMN_AMOUNT + " DOUBLE, " + COLUMN_REASON + " TEXT" + ");";
db.execSQL(CREATE_MONTHS_TABLE);

}

2 个答案:

答案 0 :(得分:0)

当您在光标上调用getCount()时,您将始终获得1,因为SUM()函数将始终返回结果,即使原始集为空:

sqlite> create table t(x);
sqlite> select sum(x) from t;
sum(x)    
----------
 

(在这种情况下,SUM()会返回NULLgetDouble()会转换为0.0。)

此外,SUM()将尝试从非数字计算总和:

sqlite> insert into t values('hello');
sqlite> select sum(x) from t;
sum(x)    
----------
0.0       

所以问题是表中的数据(或缺少它)。 要检查表中的行数,请使用不带SUM()的查询;使用COUNT()queryNumEntries()

答案 1 :(得分:-3)

使用字符串执行可能不是查询的最佳方式,因为它更容易出错,请尝试这样做: -

cursor = db.query(database.Tablename, new String[]{"SUM(" + 
database.columname + ")"}, null, null, null, null, null);