Android游标 - 两个花车如果相等则不添加?

时间:2013-01-02 02:18:58

标签: java android

这是一个奇怪的问题,我希望它有一个简单的解决方案。我有一个加密值的数据库。我创建了一个游标,它将遍历表中的每个条目,解密我需要的列中的值,并将值添加到变量“total”。我想要列中所有值的总和。这是代码:

while (c.moveToNext())
      {           
            strTotal = c.getString(c.getColumnIndexOrThrow(KEY_TOTAL));
            strTotal = sc.decrypt(strTotal);
            total = Float.valueOf(strTotal) + total;             
      }

现在,这是一个奇怪的部分。假设我在数据库中有两个值:2 + 4.每个值解密后,它将正确添加它们:6。现在,如果值相等:2 + 2,例如,方法返回“2”而不是“4”。即使它以十进制结束(2 + 2.01 = 4.01,但2 + 2仍然输出2),也会发生这种情况。

我在这里缺少什么吗?谢谢!

编辑:

我已经更改了代码,只是为了查看解密是否是问题而且它仍然给我相同的结果:

float total = 0;
String strTotal = "10";
while (c.moveToNext())
      {     
          try {
                //strTotal = sc.decrypt(c.getString(c.getColumnIndex(KEY_TOTAL)));
                total = Float.valueOf(strTotal) + total;
            } catch (Exception e) {
                Log.e(TAG, "exception", e);
            }           
      }

此代码返回“10”,即使数据库中有3个条目!看起来如果数据库中的两行在KEY_TOTAL字段中具有相同的值,则返回的结果较少。这是查询:

Cursor c = mDb.query(true, DATABASE_TABLE, new String[] {KEY_TOTAL}, KEY_TYPE + "=" + t, null, null, null, null, null);

如果我拉出数据库并使用sqlite浏览器打开它,然后选择所有行,那么我仍然可以使用3。

2 个答案:

答案 0 :(得分:0)

你检查过抛出异常吗?特别是NumberFormatException?我猜测还有一些其他逻辑问题导致循环过早退出。

答案 1 :(得分:0)

我刚检查了SQLite documentation for Android(我不是Android开发人员),我认为我发现了你的问题。查询方法的第一个参数是选择不同的行。由于您传递的是TRUE并且您只选择了一列,因此将从结果中删除重复项,这不是您想要的。

将您的查询电话更改为以下内容可以解决您的问题。

Cursor c = mDb.query(false, DATABASE_TABLE, new String[] {KEY_TOTAL},
    KEY_TYPE + "=" + t, null, null, null, null, null);