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