0

DB から 2 セットの列を返すクエリがあり、これらの列をカーソルに割り当てて、後でさらに処理するために使用する方法を知りたいです。

それは私のクエリです:

 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 つの列を非常に簡単に処理できますが、一度に両方の列を割り当てる方法を知る必要があります。

4

1 に答える 1

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")));
}

この問題に対して、属性 CapId および CapName を持つカスタム クラス CapDetails を作成します。

メソッド宣言を次のように変更します。

    public  List<CapDetails> getAllCapabilities1(String myRub)

宣言 caps を List of String ではなく List of CapDetails に変更します。

カーソルループ内:

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

                   // Assign each column value to respective capDetails attribute. then,
                   caps.add(capDetails);
                }
于 2013-03-11T09:26:02.850 に答える