как получить идентификатор строки из курсора - PullRequest
17 голосов
/ 17 мая 2010

Как мне получить идентификатор строки из Курсора?

Ответы [ 6 ]

13 голосов
/ 17 мая 2010

Я не думаю, что Курсор раскрывает это напрямую.
SQLiteDatabase.insert() возвращает идентификатор новой вставленной строки. Или в Android принято, что есть столбец с именем "_id", который содержит основной ключ автоинкремента таблицы. Так что cursor.getLong(cursor.getColumnIndex("_id")) получит это.

4 голосов
/ 11 февраля 2012

У меня была такая же проблема, когда индекс столбца для первичного ключа был указан как -1 (то есть его там нет). Проблема заключалась в том, что я забыл включить столбец _ID в первоначальное предложение SELECT, в котором был создан курсор. Как только я убедился, что он включен, столбец стал доступен, как и любой другой.

3 голосов
/ 01 марта 2011

Что касается последнего предложения ответа Ник Стронга, то следующая команда для меня не сработала. cursor.getColumnIndex("_id") было еще -1

 cursor.getLong(cursor.getColumnIndex("_id"))

Может быть, есть какая-то другая проблема в моей конфигурации, которая вызывает проблему?

Лично я взял на себя ведение собственного столбца уникальных идентификаторов в каждой создаваемой мной таблице; Боль, но это обходит эту проблему.

2 голосов
/ 21 июля 2012
return sqlite_db.query(table, new String[] { "rowid", "*" }, where, args, null, null, null);

В моем случае у меня есть «rowid» в DataManager.FIELD_ID, и это столбец идентификатора SQLite (каждая таблица в sqlite имеет этот специальный тип столбца), поэтому мне не нужен ни один из моих собственных пользовательских столбцов уникальных идентификаторов в таблицах .

0 голосов
/ 18 июля 2017

Пока TABLE не определен с помощью WITHOUT ROWID, вы можете получить ROWID (или это должно быть rowid , см. Ниже случай), если Вы указываете его как столбец для извлечения.

Например, для таблицы с 3 определенными столбцами (Имена, Цвет и Возраст) без обычного столбца _id . Следующий rawQuery работает и возвращает ROWID : -

Cursor csr = db.rawQuery("SELECT Names, Colour, Age, ROWID FROM " + TABLE_NAME,null);

Примечание! что имя столбца в курсоре строчное согласно: -

enter image description here

Примечание! ROWID в SELECT SQL не зависит от регистра (например, работает RoWiD).

Использование

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

НЕ БУДЕТ возвращать ROWID (аналогично для нуля для столбцов при использовании метода query).

Использование query ( вместо rawQuery) работает аналогичным образом, то есть вам нужно указать ROWID (обратите внимание на альтернативы ROWID ниже) в качестве столбца, который нужно получить, например, : -

Cursor csr = db.query(TABLE_NAME,new String[]{
                "OiD",
                "Names",
                "Colour",
                "Age"
        },null,null,null,null,null);

Альтернативы ROWID

Вместо ROWID вы также можете использовать _ROWID_ или OID (независимо от регистра) в качестве имени столбца в запросе, отмечая что имя столбца в результирующем курсоре является rowid т.е. это строчные буквы .

0 голосов
/ 10 ноября 2015
Cursor cursor = mySQLiteHelper.getReadableDatabase().query(TABLE_NAME, new String[] { "ROWID", "*" }, where, null, null, null, null);

тогда

long rowId = cursor.getLong(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...