2011-05-09 56 views
0

我是一個編程的完全新手,並且在WHERE year_id ='選定的年份變量'中實現SELECT查詢時出現問題,無法在列表視圖中顯示結果。我的代碼如下所示顯示存儲在數據庫中的所有條目。我怎麼能改變它過濾到year_id選定的一年,因爲我試圖做的任何事情崩潰我的應用程序?我花了幾個小時尋找教程和類似的問題,但我還是輸掉至於答案.......真的很感激一些幫助SELECT WHERE sql查詢Android問題

MyDBHelper mh = new MyDBHelper(this); 
mDb = mh.getWritableDatabase(); 
mCursor = mDb.query("tracker", null, null, null, null, null, 
    "category_name ASC"); 
startManagingCursor(mCursor); 

int view[] = {R.id.categoryNameView, R.id.dataView, R.id.placeView, R.id.amountView}; 
String col[] = { "category_name", "date", "place", "amount"}; 

SimpleCursorAdapter ca = new SimpleCursorAdapter(
     this, R.layout.display_item, mCursor, col, view); 

DisplayAllView = (ListView) findViewById(R.id.DisplayDateListView); 
DisplayAllView.setAdapter(ca); 
+0

我們怎麼幫助你的SQL查詢,如果你不後呢? – 2011-05-09 19:32:39

+0

@maple他確實發佈了查詢 - 這是Database類的一個方法。 – 2011-05-09 19:42:40

回答

2

看一看的Javadoc db.query

3D和第四ARG是

選擇的過濾器聲明 行要返回的,格式化爲SQL WHERE子句(不包括WHERE 本身)。傳遞null將返回給定表的所有行 。 selectionArgs您可以在 選擇中包括?s,它將被 替換爲來自selectionArgs的值,它們以 的順序排列,它們出現在 選擇中。這些值將被綁定爲 字符串。

所以,你會做這樣的事情

mCursor = mDb.query("tracker", null, 
      "year_id = ?", new String[] { String.valueOf(year)}, 
      null, null, "category_name ASC"); 
+0

他需要「year_id =?」嗎?在第三個參數?或者是假設... – Maximus 2011-05-09 21:43:27

+0

乾杯Heiko爲您的答覆,非常感謝。我已經查看了db.query,並嘗試了類似於您的查詢的事件,這些查詢導致此活動崩潰。當我將你的sql替換成代碼時,Activity再次崩潰了應用程序。日誌說「450:錯誤/數據庫(412):android.database.sqlite.DatabaseObjectNotClosedException:應用程序沒有關閉在這裏打開的遊標或數據庫對象」活動中唯一的其他代碼是保護無效的onDestroy {超級.onDestroy(); mDb.close();}任何想法,我做錯了,爲什麼這個錯誤發生? – hotshots 2011-05-09 22:24:59

+0

剛剛發現Maximus建議「year_id =?」這已經成功了!感謝一羣傢伙......亞倫 – hotshots 2011-05-09 22:34:32