Java 循环遍历游标的返回值时出现意外结果
我有一个游标,它通过以下方式返回一个求和的双重等价值,以从accountName=“accountY”或description=“descriptionX”的帐户中选择求和(余额):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=?"
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,它只是一个从ListArraylistFromDB
获取平衡的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);