2011-04-13 75 views
1

我的應用程序讓用戶將記錄輸入數據庫。記錄包含自動遞增的ID,日期(以mm-dd-yyyy格式顯示的文本),數量(int)以及其他一些字段。訪問遊標時出現異常

我試圖抓住所有的月份和每月的總金額。所以,我可以像在我的應用程序顯示出來:2010年12月 - 90qty,2011年1月 - 45qty ...

我使用這個查詢做到這一點:

return mDb.query("record", new String[] {KEY_ROWID, "strftime('%m-%Y', date)", "sum(quantity)"}, null, null, "strftime('%m-%Y', date)", null, null); 

我相信查詢好但在訪問遊標時出現異常。它說「日期」不是專欄。如果我將[日期]從[]重新命名爲「dateA」,則該異常讀取'dateA'不是列,所以我認爲這會縮小問題的範圍。

Cursor c = mDbHelper.fetchReport(); 
    String[] from = new String[] { "date", "quantity" }; 
     int[] to = new int[] { R.id.text1, R.id.text2 }; 

     setListAdapter(new SimpleCursorAdapter(this, R.layout.basicrow, c, from, to) { 
} 

任何想法?

更新:執行select strftime('%m-%Y',date)時,記錄的總和(數量);在adb shell中,它返回「:94」...數量在那裏(但是所有日期)但是日期不是。

當我輸入時,從記錄中選擇strftime(date),它將返回所有日期(本測試用例中爲3)。當我輸入時,從記錄中選擇strftime('%m-%Y',日期),它返回3個空白行。

+0

你能發佈你的SqliteDatabaseHelper代碼嗎? – James 2011-04-13 14:38:08

+0

你有沒有想過這個?我現在有這個相同的問題。 – Kalina 2011-07-22 21:54:49

回答

1

我相信會發生以下情況。這裏是你的查詢(簡體):

select strftime('%m-%Y', date) from record 

你做選擇日期列;您選擇一個將該列作爲參數的函數。在這種情況下,數據庫分配結果集列的一些任意名稱,如

STRFTIME_ 
05-2005 
08-2009 

正如你看到的,日期欄不會在結果集(就像錯誤說)存在。

你需要嘗試的是:

select strftime('%m-%Y', date) as date from record 

select strftime('%m-%Y', date) as formatted_date from record 

,並使用 '日期' 或 'FORMATTED_DATE' 引用ResultSet列。

P.S.從 記錄

選擇的strftime( '%間%Y',日期),它返回3個空行

這可能是不同的問題。如果將日期標記爲文本,則strftime()函數將不知道如何格式化它。

+0

當我嘗試這些時,它會返回空白行的結果。我在列中有4個日期,它返回4個空白行。 – Roger 2011-04-13 15:13:35

+0

什麼是日期字段的數據類型?你說的是真的嗎?然後結果是有點可預測的:strftime與DATE類型,而不是字符串。 – 2011-04-13 17:43:27

相關問題