2010-12-10 64 views
0

我有我的數據庫查詢當前設置像這樣:我如何將這個查詢轉換爲rawQuery?

編輯,順便說一下我的變量(_ID,CAT_ITEM和BUDGET_AMOUNT)actualy包含完全相同的文本和格式,因爲他們寫的,愚蠢的我知道,但反正不應該是問題

private String[] from = {_ID, CAT_ITEM, BUDGET_AMOUNT, }; 
private String orderBy = _ID + " ASC"; 
private String whereIn = "IN_OUT='in'"; 

Cursor cursor = db.query(CAT_BUD_TAB, from, whereIn, null, null, null, orderBy); 

這不正是我想要它做的,但我想用rawQuery而嘗試(只是爲了讓掛起查詢語句,並對其進行測試,也我不需要這麼多的字符串變量)。

這就是我想出了:

private String incomeQuery = "SELECT _ID, CAT_ITEM, BUDGET_AMOUNT FROM CAT_BUD_TAB WHERE IN_OUT=’in’"; 
Cursor cursor = db.rawQuery(incomeQuery, null); 

但是這不工作(我得到SQLException中沒有這樣的列),所以我試圖找出有什麼區別,我想有隻我的陳述有問題,但不知道是什麼。任何人都可以給我任何建議嗎?由於

回答

1

從您的代碼看起來像_ID,CAT_ITEM,BUDGET_AMOUNTCAT_BUD_TAB是字符串字段。它們的值與字段名稱相同嗎?

您的單引號在兩個查詢之間也看起來不同。

與您的問題無關,但您還需要將ORDER BY _ID ASC添加到sql的結尾以複製結果順序。

+0

對不起,我忘了提及上面提到的變量是字符串,但它們實際上包含完全相同的文本和格式(字符串CAT_ITEM =「CAT_ITEM」;等等)但感謝您指出我應該說的話。無論如何,你是對的!我沒有注意到這些單一的qoutes看起來不同! (我從指南中複製了工作內容)謝謝你指出它,現在如果我可以制定在我的鍵盤上按什麼鍵將解決問題:)謝謝! – Holly 2010-12-10 14:44:27

1

在你的第一個例子,你有以下幾種:

private String[] from = {_ID, CAT_ITEM, BUDGET_AMOUNT, }; 

如果這是正確的,這意味着你有三個變量 _列IDCAT_ITEMBUDGET_AMOUNT在你的桌子上。 CAT_BUD_TAB也是如此,它可能包含您的表的名稱。

爲了您的原始查詢是正確的,它應該再這樣寫:

String incomeQuery = "SELECT " + _ID + ", " + CAT_ITEM + ", " + BUDGET_AMOUNT + " FROM " + CAT_BUD_TAB + " WHERE IN_OUT=’in’"; 

而剛剛已經說的那樣:這是不是組成一個字符串的好方法。它應該使用StringBuilder來完成。爲了簡單起見,我在這裏只是做了這個。

+0

哦謝謝我應該提到這個,但三個變量實際上是完全一樣的內容! (我知道,愚蠢。)但這意味着這可能沒有問題。無論如何感謝您的迴應!我會看看StringBuilder – Holly 2010-12-10 14:37:59

+0

@霍利:一點也不傻,因爲變量的名字和它們的值相同 - 只要確保實際使用這個變量;)回到你的問題:你應該發一點更多的錯誤。 'SQLException no such column'可能會說多一點(希望哪一列它找不到)。 – Nailuj 2010-12-10 14:40:07

+0

@霍利:還有一件事你可以做。試着只寫'SELECT * FROM ...',看看你是否真的設法執行一個原始查詢。如果這樣做,你可以回去嘗試只提取你需要的列。 – Nailuj 2010-12-10 14:41:42