我有存儲在它的錢的項目表,按日期。
一些資金項目類型爲貸款和他人借用。與工會選擇所有聲明拋出異常:沒有這樣的列:借
我想要做的,放在一個ListView 3個元素:日期,貸款金額爲這個日期的總和,借款金額爲這個日期的總和。
這裏是我的代碼,以填補我的光標:
Cursor cursor = mDb.rawQuery("SELECT date_o, loan, borrow FROM " +
"(SELECT strftime('%m', date) as date_o, SUM(amount) as loan FROM " +
"(SELECT date, amount FROM " + DATABASE_TABLE + " WHERE date > date('now', '-6 months') AND TYPE = " + ActivityClass.DATABASE_LOAN_TYPE + " ORDER BY date DESC) " +
"GROUP BY strftime('%m', date) " +
"UNION ALL " +
"SELECT strftime('%m', date) as date_o, SUM(amount) as borrow FROM " +
"(SELECT date, amount FROM " + DATABASE_TABLE + " WHERE date > date('now', '-6 months') AND TYPE = " + ActivityClass.DATABASE_BORROW_TYPE + " ORDER BY date DESC) " +
"GROUP BY strftime('%m', date)) GROUP BY date_o", null);
這裏是代碼,以填補我的ListView:
List<List<Float>> amountByMonth = new ArrayList<>();
List<Float> data = new ArrayList<>();
if (cursor.moveToFirst()) {
do {
data.add(Float.parseFloat(cursor.getString(0)));
data.add(Float.parseFloat(cursor.getString(1)));
data.add(Float.parseFloat(cursor.getString(2)));
amountByMonth.add(data);
}
while (cursor.moveToNext());
}
所以我的函數會返回一個List<List<Float>>
。
我的問題是:
Couldn't read row 0, col 2 from CursorWindow
所以我的調查表明,cursor.getString(2)
不存在(拋出異常),我認爲我的查詢被嚴重構成。
表詳細信息如下:
private static final String TABLE_MONEY = "money",
KEY_MONEY_ID = "id",
KEY_MONEY_TITLE = "title",
KEY_MONEY_AMOUNT = "amount",
KEY_MONEY_DETAILS = "details",
KEY_MONEY_DATE = "date",
KEY_MONEY_TYPE_FK_ID = "type",
KEY_MONEY_CONTACT_FK_ID = "contact",
KEY_MONEY_REMINDER_FK_ID = "reminder";
如果您需要進一步的細節,不要猶豫,問。
編輯:我修改我的查詢,是因爲我在測試//。 我在這裏得到的問題是列借用是未知的。
感謝Rotwang,但是你就不能幫幫我嗎?我想也許這是我需要的一種加入,你不覺得嗎?有什麼方法可以幫助你,而不是在評論中感到不安?會真的幫助我(並感謝減1)。 – Alexandre
嗨Rotwang,我的帖子,真的認爲你很傷心。對於你的解決方案,它工作的很好(線索:列數和列數相同),我的錯誤:認爲貸款和借款會自動完成自己作爲我的請求的第二和第三列。 – Alexandre
沒關係。一個建議:研究將要用來避免這種錯誤的SQL語句的邏輯。 –