С помощью курсора вы можете (хотя и не рекомендуется) использовать определенные смещения (метод getColumnIndex возвращает смещение, все методы get ???? принимают смещение) .
Допустим, запрос был SELECT * FROM A JOIN B ON A.id = B.maptoAid
и
- Таблица A содержит столбцы: -
- id (смещение 0 ) и
- имя (смещение 1 )
- и Таблица B имеют столбцы: -
- id и (смещение 2 )
- maptoAid (смещение 3 ) и
- бла (смещение 4 )
Затем (только для вышеуказанного необходимо определить смещения)
, чтобы получить A.id используйте cursor.getInt(0);
, чтобы получить B.id используйте cursor.getInt(2);
Примечание Использование смещений не рекомендуется использовать для псевдонимов столбцов ()AS ) вместе с курсором getColumnIndex метод.
- смещения не допускают изменений в запросе, то есть изменение количества или порядка столбцов и смещений может потребоваться пересчитать.
- имена, с помощью метода getColumnIndex (если не повторяется одно и то же имя) допускают такие изменения
Такие как
SELECT a.id AS aid, b.id AS bid .... other columns (aliased or not) .... FROM A JOIN B ON A.id = B.maptoAid
Или проще кодировать бит сбольшие накладные расходы
SELECT *, A.id AS aid, B.id FROM A JOIN B ON A.id = B.maptoAid
и затем используйте: -
cursor.getInt(cursor.getColumnIndex("aid"));
cursor.getInt(cursor.getColumnIndex("bid"));
Я получаю "B.id", помещаю ли я ... и любую идею, почему код, который я разместил, можетне работает?
Причина, по которой вы получаете B.id , заключается в том, что метод getColumnindex
не завершает цикл, когда находит столбец, НОпродолжает цикл, возвращая последний, если существует более одного столбца с одинаковым именем.
Также обратите внимание (если не исправлено), что метод Cursor getColumnIndex
также чувствителен к регистру.Так что cursor.getInt(cursor.getColumnIndex("Aid"))
вернет -1 .