Java 在Android字符串中操作数据库输出
我试图将SQLite查询的输出分为两部分——KEY_DATE和KEY_ROWID+KEY_TYPE。以下是不带键类型位的代码:Java 在Android字符串中操作数据库输出,java,android,Java,Android,我试图将SQLite查询的输出分为两部分——KEY_DATE和KEY_ROWID+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 mCurso
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 tempStr = DataBaseAdapter.KEY_ROWID + DataBaseAdapter.KEY_TYPE;
String[] columns = new String[] {DataBaseAdapter.KEY_DATE,tempStr};
您在中所做的:
String[] columns = new String[] {DataBaseAdapter.KEY_DATE, DataBaseAdapter.KEY_ROWID + DataBaseAdapter.KEY_TYPE}
您是concat stringsDataBaseAdapter.KEY\u ROWID+DataBaseAdapter.KEY\u TYPE
,它将引导您找到一些新的列名,这些列名是两者的混合体(例如,如果KEY\u ROWID=“\u id”
和KEY\u TYPE=“device”
,那么新列名将是“\u iddevice”
)。这可能会影响结果。确保您的列与我上面提到的这两个列名的连接具有相同的名称。但是,如果要在结果中包含KEY\u TYPE
,请添加KEY\u TYPE
作为保存列名的数组的单独元素。然后从结果行中的两列合并结果。(我假设这就是你想要实现的目标)
String[]columns=new String[]{DataBaseAdapter.KEY\u TYPE,DataBaseAdapter.KEY\u ROWID};
列表=新的ArrayList();
查询的游标结果=database.query(DataBaseAdapter.TABLE\u名称、列、null、null、null、null、null);
if(查询的结果\u.moveToFirst())
{
while(query.isAfterLast()的结果=false)
{
MyResult=新的MyResult();
setId(query.getInt的result_(query.getColumnIndex(DataBaseAdapter.KEY_ROWID))的result_);
setType(query.getString的结果(query.getColumnIndex(DataBaseAdapter.KEY类型))的结果);
_query.moveToNext()的结果_;
列表。添加(结果);
}
}
_query.close()的结果_;
---
公共类MyResult
{
私有字符串类型;
私有int-id;
公共void集合类型(字符串t)
{
类型=t;
}
公共字符串getType()
{
返回类型;
}
公共无效集合ID(int t)
{
id=t;
}
公共int getId()
{
返回id;
}
}
---
好的,我找到了一个更简单的答案。问题实际上在于连接。我试图在String[]列中执行此操作…
但实际上我需要做的是在SELECT
查询中连接at并使用别名。因此,我将字符串[]列
更改为包含列别名KEY\u ROWID\u 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\u ROWID\u类型
感谢大家的帮助。对您来说,“+”意味着什么?连接。我在其他地方使用过它,没有任何问题,例如,Cursor mCursor=db.query(true,DATABASE_LOGTABLE,新字符串[]{KEY_ROWID,KEY_TYPE,KEY_DATE,KEY_NOTES},KEY_TYPE+“=”+rowType,null,null,null,null,null)代码>我弄错了吗?你是不是想做一个Where子句?找到了一个非常简单的解决方案并添加为答案谢谢,但这似乎无法正确构建数组。应该有一些明确的循环吗?谢谢你的回答。你能给我一个我应该如何连接的例子吗?在你的DataBaseAdapter
类中声明另一个静态字符串KEY\u ROWID\u TYPE=KEY\u ROWID+KEY\u TYPE
然后访问它DataBaseAdapter.KEY\u ROWID\u TYPE
。但是你想做什么呢?在评论中,我可能注意到您试图编写Where子句……我可能错了。或者您正试图将两列中的数据合并?如果是的话。然后,您需要将输出字符串而不是列名合并。你好,Nikola。我试图在一个简单的可扩展列表中显示一些连接的数据。我想我可以把两个数据库字段的输出放在一起(我可能会在它们之间留出一个空格),但这并不像那样容易!当然,这是可以实现的,您必须为ExpandableListView使用另一个适配器,该适配器将List/array作为其构造函数的参数(例如ArrayAdapter),但在实例化适配器之前,请迭代游标数据以获取数据,执行所需的concation,然后实例化适配器并将其传递给expandablelistview。我希望这给了你一个想法。谢谢尼古拉,我明白你的意思了。你有一个我可以改编的例子吗?
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);