将两个DB列的值分配给光标?

时间:2013-03-11 09:16:49

标签: android sqlite android-cursor

我有一个从DB返回2组Col的查询,我想如何将这些列分配给Cursor,然后再将它们用于进一步处理。

我的查询:

 public  List<String> getAllCapabilities1(String myRub)             
                {

                    List<String> Caps = new ArrayList<String>();

                    // Select All Query
                    String selectQuery = "SELECT Cap_Name, Cap_ID FROM capability where Rub_ID = '"+myRub+"'";

                    SQLiteDatabase database = this.dbOpenHelper.getReadableDatabase();

                    Cursor cursor = database.rawQuery(selectQuery, null);
                    // looping through all rows and adding to list
                    if (cursor.moveToFirst()) 
                    {
                        do 
                        {
                          Caps.add(cursor.getString(0));
                        } 
                        while (cursor.moveToNext());
                    }

此查询返回:

Cap_Name    Cap_ID
Cap 1         1
Cap 2         2   
Cap 3         3

使用普通光标我可以非常轻松地处理一个列,但我需要知道如何一次分配两列。

1 个答案:

答案 0 :(得分:1)

Android Cursor是SELECT查询的ResultSet,它可以包含任意数量的列。

每个列值可以得到:

Cursor c = db.rawQuery("SELECT * FROM TABLE_NAME", null);

while(c.moveToNext()) {
    Log.d("Column1", c.getString(c.getColumnIndex("Column1")));
    Log.d("Column2", c.getString(c.getColumnIndex("Column2")));
}

针对您的问题,创建一个自定义类CapDetails,其属性为CapId和CapName。

将方法声明更改为:

    public  List<CapDetails> getAllCapabilities1(String myRub)

并将声明上限更改为Cap of CapDetails而不是List of String。

在游标循环中:

                while (cursor.moveToNext()) 
                {
                   CapDetails capDetails = new CapDetails();

                   // Assign each column value to respective capDetails attribute. then,
                   caps.add(capDetails);
                }