Java 循环遍历游标的返回值时出现意外结果

Java 循环遍历游标的返回值时出现意外结果,java,android,sql,sqlite,android-studio,Java,Android,Sql,Sqlite,Android Studio,我有一个游标,它通过以下方式返回一个求和的双重等价值,以从accountName=“accountY”或description=“descriptionX”的帐户中选择求和(余额): public Double itemSum(String[] sumCriteria) { Cursor cursor = mainAccountsDatabase.rawQuery("SELECT SUM(balance) FROM accounts WHERE ?=? OR description=?"

我有一个游标,它通过以下方式返回一个求和的双重等价值,以从accountName=“accountY”或description=“descriptionX”的帐户中选择求和(余额):

public Double itemSum(String[] sumCriteria) {
    Cursor cursor = mainAccountsDatabase.rawQuery("SELECT SUM(balance) FROM accounts WHERE ?=? OR description=?",
            new String[]{sumCriteria[0], sumCriteria[1], sumCriteria[2]});

    if (cursor.moveToFirst()) {
        return cursor.getDouble(0);
    }
    return null;
}
在我的Java代码中,我有以下内容:

public void dbGenerator(AccountAdapterView adapter, String filter1, String filter2, String filter3) {
    NumberFormat formatter = NumberFormat.getCurrencyInstance();
    for (int i = 0; i < listFromDB.size(); i++) {
        ListParser newAccount;
        String accountNameDisplay = listFromDB.get(i).getaccountName();
        String descriptionDisplay = listFromDB.get(i).getDescription();
        Double balanceCompare = maSource.itemSum(new String[]{"accountName",accountNameDisplay,accountNameDisplay, "null"});
        Double balance = listFromDB.get(i).getBalance();
        String formatted = formatter.format(balance);
        newAccount = new ListParser(accountNameDisplay, descriptionDisplay, formatted);
        adapter.add(newAccount);
    }
}
itemSum
中的总和在我看来是正确的

为了查看每个求和值,您可能需要发布到logcat中的是这一行

  Double balanceCompare = maSource.itemSum(new String[]
 {"accountName",accountNameDisplay,accountNameDisplay, "null"});
在循环本身内部

现在,你为什么要这么做

Double balanceCompare = maSource.itemSum(new String[]{"accountName",accountNameDisplay,accountNameDisplay, "null"});
newAccount = new ListParser(accountNameDisplay, descriptionDisplay, formatted);
        adapter.add(newAccount);
如果未将
balanceCompare
本身调用(未填充)到
ListParser
中。我的意思是
ListParser的
构造函数正在接受
accountnamesplay、descriptionDisplay、格式化
,那么
余额比较
在哪里呢

也许你的意思是(相反)


此外,如果回忆一下,占位符仅在应用于某些值时才相关,因此无法绑定
WHERE?=?
的第一个

“检查logcat,10个样本行的第一个输出结果是未推荐的值,其中第一个填充的列表项与“description”列匹配,以下9个和为0。”-您可能想在此基础上进行扩展。很难看出您的问题,特别是因为您没有提供有关引用文本的
getBalance
,在我的示例数据中,第一个accountName是
account1
。第二列的accountName为
account4
,描述为
account1
。我会得到-1000作为我的第一个总数,然后0作为休息。至于getBalance,它只是一个从ListArray
listFromDB
获取平衡的getter,没有什么特别之处。我还输出了发送到
itemSum
accountName
description
,一切正常。我在logcat中输入了确切的内容,这就是我看到值的方式
balanceCompare
是最近添加的一项功能,用于获取总和,最终它将按照您显示的方式合并。起初,我正在输出帐户并开始结余。现在我将所有发生在itemSum中的事务相加。由于某种原因,我无法输出正确的总和,即使输出到我的logcat的正确信息也被发送到ItemSum这里有一件事让我困惑,如果数据库中的
accountName
不匹配,但它与
description
匹配怎么办?以示例中的第4行为例,您将
account1
传递到函数中,然后
account1
与示例中的第4行不匹配,但当您使用
或description
时,也将取第4行。顺便问一下,为什么
说明
中会包含一个对应的帐户名?
Double balanceCompare = maSource.itemSum(new String[]{"accountName",accountNameDisplay,accountNameDisplay, "null"});
newAccount = new ListParser(accountNameDisplay, descriptionDisplay, formatted);
        adapter.add(newAccount);
// balanceCompare ?
String formatted = formatter.format(balanceCompare );
        newAccount = new ListParser(accountNameDisplay, descriptionDisplay, formatted);