在Android字符串中操作数据库输出

时间:2011-12-13 16:43:19

标签: java android

我正在尝试将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};

它不起作用。

所有人都非常感谢!

3 个答案:

答案 0 :(得分: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",那么新的列名将是{ {1}})。这可能会影响结果。确保您的列具有与上面提到的这两个列名称的同名相同的列。但是,如果要在结果中包含"_iddevice",请将KEY_TYPE添加为包含列名的数组的单独元素。然后从结果行中的两列连接结果。 (我假设这是你想要达到的目标)

KEY_TYPE

答案 1 :(得分: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

感谢大家的帮助。

答案 2 :(得分:0)

我会尝试连接然后插入数组

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