这是一个奇怪的问题,我希望它有一个简单的解决方案。我有一个带有加密值的数据库。我创建了一个游标,它将遍历表中的每个条目,解密我需要的列中的值,并将值添加到变量“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,但是。