2011-12-13 59 views
0

我試圖操縱一個SQLite查詢的輸出,所以分成兩個部分 - KEY_DATE和KEY_ROWID + key_type的。這裏有沒有爲key_type位代碼:操作數據庫輸出

DataBaseAdapter db = new DataBaseAdapter(this); 
    db.open(); 
    // get last test date 
    int whichItem = 1; 
    int upDown = 1; // use 1 for descending ordering 
    Cursor mCursor = db.getLogType(whichItem, upDown); 
    String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID}; 
    startManagingCursor(mCursor); 
    ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item_2, mCursor, columns, new int[] {android.R.id.text1, android.R.id.text2}){ 
     public boolean areAllItemsEnabled(){ 
      return false; 
     } 
     public boolean isEnabled(int position){ 
      return false; 
     } 
    }; 
    setListAdapter(adapter); 
    db.close(); 

它工作正常,但是當我更換:

String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID}; 

有:

String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID + DataBaseAdapter.KEY_TYPE}; 

這是行不通的。

所有幫助非常感謝!

+0

什麼是「+」對你意味着什麼? – AlfredoVR

+0

連接。我在其他地方沒有問題地使用它,例如'Cursor mCursor = db.query(true,DATABASE_LOGTABLE,new String [] {KEY_ROWID,KEY_TYPE,KEY_DATE,KEY_NOTES},KEY_TYPE +「=」+ rowType,null,null,null,null);'我有這個錯誤? – user114671

+0

你想製作一個Where子句嗎? –

回答

1

好吧,我找到了一個更簡單的答案。這個問題真的與串聯有關。我試圖做到這一點在String[] columns...,但實際上我需要做的是在爲SELECT查詢的一部分來連接和使用別名。因此,我改變了String[] columns包括列別名KEY_ROWID_TYPE如下:

String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID_TYPE}; 

和查詢則是:

Cursor mCursor = db.query(true, DATABASE_LOGTABLE, new String[] {KEY_ROWID, KEY_TYPE, KEY_DATE, KEY_ROWID + " || \"-\" || " + KEY_TYPE + " as " + KEY_ROWID_TYPE}, null, null, null, null, null, null); 

當然,我所定義的KEY_ROWID_TYPE了。

感謝大家的幫助。

0

我會嘗試串聯,然後插入到數組

String tempStr = DataBaseAdapter.KEY_ROWID + DataBaseAdapter.KEY_TYPE; 
String[] columns = new String[] {DataBaseAdapter.KEY_DATE,tempStr}; 
+0

謝謝,但這似乎並沒有正確構建陣列。應該有一些明確的循環? – user114671

1

你在做什麼:

String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID + DataBaseAdapter.KEY_TYPE} 

您是CONCAT字符串DataBaseAdapter.KEY_ROWID + DataBaseAdapter.KEY_TYPE這會導致你一些新的列名是兩者的混合(例如,如果KEY_ROWID="_id"KEY_TYPE="device"然後新的列名會"_iddevice")。這可能會影響結果。請確保您的列與我上面提到的這兩個列名的縮寫具有相同的名稱。但是,如果要在結果中包含KEY_TYPE,請將KEY_TYPE作爲包含列名稱的數組的單獨元素添加。然後從結果行中的兩列中鏈接結果。 (我假設這是你試圖實現的)

String[] columns = new String[] {DataBaseAdapter.KEY_TYPE, DataBaseAdapter.KEY_ROWID}; 
List<MyResult> list = new ArrayList<MyResult>(); 
Cursor result_of_query = database.query(DataBaseAdapter.TABLE_NAME, columns, null, null, null, null, null); 
      if(result_of_query.moveToFirst()) 
      { 
       while(result_of_query.isAfterLast()==false) 
       { 
        MyResult result = new MyResult(); 
result.setId(result_of_query.getInt(result_of_query.getColumnIndex(DataBaseAdapter.KEY_ROWID)))); 
       result.setType(result_of_query.getString(result_of_query.getColumnIndex(DataBaseAdapter.KEY_TYPE)))); 

        result_of_query.moveToNext(); 
        list.add(result); 

       } 
      } 

      result_of_query.close(); 


--- 

public class MyResult 
{ 
    private String type; 
    private int id; 
    public void setType(String t) 
    { 
     type=t; 
    } 
    public String getType() 
    { 
     return type; 
    } 

    public void setId(int t) 
    { 
     id=t; 
    } 
    public int getId() 
    { 
     return id; 
    } 
} 

--- 
+0

感謝您的回答。你能給我舉一個我應該怎麼做串聯的例子嗎? – user114671

+0

在你的'DataBaseAdapter'類中聲明另一個'static String KEY_ROWID_TYPE = KEY_ROWID + KEY_TYPE;'然後訪問它'DataBaseAdapter.KEY_ROWID_TYPE'。但是你想要做什麼?在評論中我可能會注意到,你正在嘗試寫一個Where子句......我可能是錯的。或者你正在試圖從兩個列中分析數據?如果是這樣。比您需要concination輸出字符串而不是列名稱。 –

+0

嗨尼古拉。我試圖在簡單的可擴展列表中顯示一些連接的數據。我認爲我可以將兩個數據庫字段的輸出放在一起(我可能會在適當的時候在它們之間放置一個空格),但它不那麼容易! – user114671