2011-09-29 88 views
0

我一直在試圖找出這個問題而沒有尋求幫助,但我已經達到了我真正無法弄清楚的程度。我的數據庫查詢顯示按字母順序對值進行排序

這裏是我用來查詢數據庫的功能(我不得不保密的改變名稱):

public Cursor getAllItems(){ 
    Cursor cursor = db.query(true, DATABASE_TABLE, new String []{KEY_NAME, KEY_1,KEY_2, KEY_3, 
       KEY_4, KEY_5, KEY6, 
       KEY_7, KEY_8, KEY_9, KEY_10, KEY_11, KEY_12, 
       KEY_13}, null, null, null, null, null, null); 
    cursor.moveToFirst(); 

    return cursor; 
} 

這是我填充已使用XML創建一個tablelayout。

public void populate(){ 
    db = new DBAdapter(this); 

    TableLayout TL = (TableLayout)findViewById(R.id.table);   

    db.open(); 
    c = db.getAllItems();  
    while(!c.isAfterLast()){ 
     if(Integer.toString(c.getPosition())!=null){ 
     TableRow TR = new TableRow(this); 

     TR.setId(c.getPosition()); 

     TextView column1 = new TextView(this); 
     TextView column2 = new TextView(this); 
     TextView column3 = new TextView(this); 

     TR.setLayoutParams(new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));   

     column1.setGravity(0x01); 
     column1.setTextColor(0xff000000); 
     column1.setTextSize(2,20); 
     //column1.setText(c.getString(3)); 
     column1.setText(Integer.toString(c.getPosition())); 
     TR.addView(column1);     

     column2.setGravity(0x01); 
     column2.setTextColor(0xff000000); 
     column2.setTextSize(2,20); 
     column2.setText(c.getString(0)); 
     TR.addView(column2);   

     column3.setGravity(0x01); 
     column3.setTextColor(0xff000000); 
     column3.setTextSize(2,20); 
     //column3.setText(c.getString(1)); 
     column3.setText(Integer.toString(TR.getId())); 
     TR.addView(column3); 


     TR.setOnLongClickListener(this); 
     TL.addView(TR); 

     1Total += c.getDouble(1); 
     2Total += c.getDouble(2); 
     } 
     c.moveToNext(); 
    } 
    db.close(); 

如果我查看使用DDMS數據庫,一切都被顯示在正確的順序(其中我插入到表中的順序)。但是,當我嘗試在tablelayout中顯示數據時,出於某種原因,它會根據KEY_NAME值組織值。因此,如果我將數據插入表格中,如「B - C - D - A - E」,它將填充我的表格佈局「A - B - C - D - E」

奇怪的是,以便在任何給定行上單擊並生成一個顯示其餘信息的對話框片段,並且此信息是正確的。因此,如果使用上面的例子,我長按一下顯示的「C」行,然後我會實際得到「D」的數據,這是正確的。

有什麼想法?

回答

0

在Javadoc文檔SQLiteDatabase類的查詢方法,它說,「傳遞空[的排序順序]將使用默認的排序順序,這可以是無序的。」那空是要經過許多空值的一個,所以爲了可能是無序的,但顯然它可以代替訂購。

也許嘗試使用public Cursor rawQuery (String sql, String[] selectionArgs)而不是查詢?

所以我覺得對於你的情況,這將是像

public Cursor rawQuery (String "SELECT DISTINCT KEY_NAME, KEY_1,KEY_2, KEY_3, KEY_4, KEY_5, KEY6, KEY_7, KEY_8, KEY_9, KEY_10, KEY_11, KEY_12, KEY_13 FROM DATABASE TABLE", null);

這是我的經驗是安卓的SQLite的插入順序返回rawQuery的結果,儘管我不知道,它的要求。更可靠的方法是添加自動增量鍵列 - 給每行賦予一個序列號,然後排序查詢的結果。

+0

我打算接受這個答案作爲解決方案。我解決這個問題的方式基本上就是你在第二部分所說的。我已經有一個autoincrementing id,但我沒有做的是在我的查詢語句中返回id。我還編輯了查詢函數調用,如下所示: Cursor cursor = db.query(DATABASE_TABLE,new String [] {KEY_ROWID,KEY_NAME,KEY_1,KEY_2,KEY_3,KEY_4,KEY_6,KEY_7,KEY_8,KEY_9,KEY_9,KEY_10 ,KEY_11,KEY_12,\t KEY_13},null,null,null,KEY_ROWID); – JaRay

相關問題