【问题标题】:Android database SQlite sum() is not working in my case?Android 数据库 SQlite sum() 在我的情况下不起作用?
【发布时间】:2018-01-05 22:19:56
【问题描述】:

我不明白我的代码有什么问题,请在这里帮助我

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

}

【问题讨论】:

  • 您的代码没有问题!确定您的表格中有任何行吗?
  • 是的,我很确定,因为我使用 getCount() 来检查 getCount()0。所以我想我可以假设该行在我的数据库中可用。
  • 检查表的 COLUMN_AMOUNT 列并打印所有行可能是错误的!并将 SUM(...) 更改为 sum(...)。我知道 SQL 不是 CS,但一定要这样做!
  • 嘿实际上,我是 android 编程新手,所以你能用代码表达你所说的话,这对我来说会很棒。
  • 将表格方案添加到您的问题中

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


【解决方案1】:

当你在游标上调用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()

【讨论】:

  • 但我的主要目的是获取COLUMN_AMOUNT 的总和,所以当我没有得到总和时,我使用getCount() 检查它是否返回计数,以便我可以确认输入数据是否在数据库中。
【解决方案2】:

使用字符串执行可能不是最好的查询方式,因为它更容易出错,请尝试以下方法:-

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

【讨论】:

  • 请不要进行随机猜测query()rawQuery() 都可以完美运行。
  • 是的,你说得对,我删除了最后一句话。我只是向他展示了一个更好的方法。
  • 你也应该删除第一句话。
  • 我的自我不允许我:)。它对需要它的人有用。
  • 使用 android 方法不是比使用 execSQL 语句更不容易出错且更清晰吗? .至少你不必调整空格。
猜你喜欢
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2014-02-19
  • 2013-12-09
  • 2015-08-05
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
相关资源
最近更新 更多