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

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

我试图将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 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 strings
DataBaseAdapter.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);