2011-12-13 61 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