6

SQLiteデータベースの2つのテーブルtable1とtable2でINNERJOINを使用しています。カーソルから結果(両方のテーブルの列)にアクセスするにはどうすればよいですか?2つのテーブルには、同じ名前の2つの列があります。

        String query = SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE name like '%c%';
        Cursor c = newDB.rawQuery(query, null);
4

5 に答える 5

6

'*'を使用する代わりに、列名を指定できます。

String query = SELECT table1.id AS ID,table2.column2 AS c2,...... FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE name like '%c%';

次に、列名ID、c2などを使用してアクセスします。

while (cursor.moveToNext()) {
  String c2 = cursor.getString(cursor.getColumnIndex("c2"));
  int id = cursor.getInt(cursor.getColumnIndex("ID"));
  ..............
  .............
}

壊れたリンクの編集:ここhttp://www.vogella.com/tutorials/AndroidSQLite/article.html およびここhttp://www.codota.com/android/methods/android.database.sqlite.SQLiteDatabase/でrawQuerymethidを確認してくださいさまざまな例のrawQuery

于 2013-01-29T06:20:54.393 に答える
2
Cursor c=databseobject.functionname() //where query is used
if(c.movetofirst()) {
    do {
        c.getString(columnindex);
    } while(c.movetoNext());
}
于 2013-01-29T06:16:20.293 に答える
2

他のクエリと同じように結果にアクセスできます。唯一の違いは、名前が競合する可能性があり、両方のテーブルで同じ列名になることです。これらの競合を解決するには、テーブル名をプレフィックスとして使用する必要があります。

例えば

Long id = c.getLong(c.getColumnIndex(tableName1 + "." + idColumnName));

このアプローチが機能しない場合。次のようにクエリを作成する必要があります。

String query = SELECT table1.id AS table1_id FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE name like '%c%';
Cursor c = newDB.rawQuery(query, null);

もう 1 つの一般的な注意事項として、"Select *..." は使用しない方がよいため、選択する列を明示的に記述することをお勧めします。

于 2013-01-29T06:19:28.007 に答える
1

私は内部結合を行うために以下を使用しました:

public Cursor innerJoin(Long tablebId) {
    String query = SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE name like '%c%';
    return database.rawQuery(query, null);
}

以下のようにカーソルを繰り返すことができます。

Cursor cursor = innerJoin(tablebId);
  String result = "";
  int index_CONTENT = cursor.getColumnIndex(KEY_CONTENT);
  cursor.moveToFirst();
  do{
     result = result + cursor.getString(index_CONTENT) + "\n";
    }while(cursor.moveToNext());

これがあなたのために働くことを願っています

于 2013-01-29T05:58:37.317 に答える
1

列名がわかっている場合は、次のように見つけることができます。

long id = cursor.getLong(cursor.getColumnIndex("_id"));
String title = cursor.getString(cursor.getColumnIndex("title"));

返されたカーソルのすべての列名を表示したいだけの場合は、String [] getColumnNames()メソッドを使用してすべての列名を取得できます。

これがあなたにいくつかのヒントを与えることを願っています。

于 2013-01-29T05:59:08.610 に答える