Важным аспектом является не таблица или таблицы, а сам запрос, поскольку он определяет порядок столбцов.
Например, если запрос основан на SELECT * FROM your_table
(и столбцахв таблице были определены как id, songname, songyear, songpath), тогда столбец является курсором в соответствии с определением.
Однако, если вы сделали SELECT songname, songpath, songid, songyear FROM your_table;
Порядокбудет в соответствии с оператором SELECT , т. е. songname (0), songpath (1), songid (2), songyear (3).
Однако это одна из проблем при использованиисмещает, вы привязаны к порядку в соответствии с SELECT.
Теперь, если вы использовали метод Cursor's getColumnIndex , то он возвращает смещение столбца в соответствии с его именем.
Итакcursor.getString(cursor.getColumnIndex("songpath"));
получит столбец songpath независимо от его смещения / положения в Курсоре (ЕСЛИ КУРСОР ВКЛЮЧАЕТ ЭТУ КОЛОННУ).
Вспоминая ваш предыдущий вопрос, у вас в основном был SELECT songpath FROM your_table
, поэтому существует только одинстолбец врезультирующий курсор, так что вы можете использовать только get: -
cursor.getString(0);
или: -
cursor.getString(cursor.getColumnIndex("songpath"));
Последний является рекомендуемым методом (НО в идеале имена столбцов должны определяться как константы)
Вопросы могут быть более сложными, хотя, например, рассмотрим
SELECT songpath||songname AS myconfusingcolumn FROM yourtable;
Это вернет один столбец с именем myconfusingcolumn, который состоит из пути к песне, объединенного с именем песни.То есть за ключевым словом AS следует псевдоним для столбца (без AS имя столбца будет еще более запутанным / сложным, поскольку это будет songpath || songname) (этот пример относительно прост).
Еще один момент, о котором следует опасаться, это, например, неоднозначные столбцы (дублированные имена столбцов), если у вас было две таблицы: song, artist и song в дополнительном столбце artist_id, то есть: -
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *} * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *] *] *] *] * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * .. ЭХ Э, ОЧХ ГУ был, НАЗ, НАХОБЫ, О ЗАН был, ОЗЕШЕН был ДОЛГО. О СРОК.*
Таблица художников с столбцами id и имя_художника
, а затем вы использовали
SELECT * FROM song JOIN artist ON song.artist_id = artist.id;
- Обратите внимание, что в качестве столбца id таблицы artist , если он используется в операторе, он должен иметь префикс с соответствующим именем таблицы, в противном случае ошибка столбца AMBIGUOUS будетбыть поднятым, т.е. парсер SQL не будет знать, какой столбец id вы имеете в видуn.
Кроме того, вы получите курсор, имеющий столбцы: -
id , имя песни, songyear, songpath, artist_id, id , artist_name
csr.getLong(csr.getColumnIndex("id")); could get confused (I believe it actually gets the last AMBIGUOUS column)
long songid = csr.getLong(0); would get the id column from the song table.
long artistid = csr.getLong(5); would get the id column from the artist table.
long artistid = csr.getLong(4); would also get the artist_id same as (5).
Подведем итоги: -
Столбцы, порядок и имя в курсоре полностью зависят от запроса SELECT. Онибудет иметь смещение и имя в соответствии с запросом.При доступе к курсору имена таблиц не могут быть использованы только для имен столбцов или смещений.
Более гибкий доступ к столбцам по их именам, а не по сторонним ресурсам .То есть используйте метод Cursor getColumnIndex , поскольку он исключает необходимость вычисления смещений и, в частности, пропускает пересчет при изменении запроса.
Использование CONSTANTS для имен столбцоввероятно, приведет к уменьшению проблем, таких как ошибки ввода.
Дополнительно
Использование Toast.makeText(this, mListSongs+"", Toast.LENGTH_SHORT).show();
Получит необычный результат [{}], потому что mListSongs - этовесь контейнер для песен.Вам нужно зациклить каждый элемент, а затем получить свойства / значения для каждого члена / переменной из элемента (объект Song).