我有一个游标,通过以下方式返回一个加倍的双等价于SELECT SUM(balance) FROM accounts WHERE accountName="accountY" OR 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);
}
}
其中listFromDB
是预先填充的ListArray
,其中包含来自数据库"accountName"
列的帐户名称。
检查logcat
10个样本行的第一个输出会导致第一个填充的列表项与"description"
列匹配的未编号值,以及后面的9个和为0。
如果我对10行中的每一行执行SQL,我会得到正确的总和。为什么光标提供不同的输出?
以下是数据外观的小型表示。
accountName,description,balance
account1,description1,500
account2,description2,20
account3,description3,-68
account4,account1,-1000
account5,description4,400
account6,account2,180
答案 0 :(得分:0)
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's
构造函数接受accountNameDisplay, descriptionDisplay, formatted
,那么balanceCompare
呢?
也许你的意思是(而不是)
// balanceCompare ?
String formatted = formatter.format(balanceCompare );
newAccount = new ListParser(accountNameDisplay, descriptionDisplay, formatted);
此外,如果召回,占位符仅在应用于某些值时才相关,因此?
的第一个WHERE ?=?
无法绑定。