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

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

Ответы

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

return sqlite_db.query(table, new String[] { "rowid", "*" }, where, args, null, null, null);

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

Ответ 5

Cursor cursor = mySQLiteHelper.getReadableDatabase().query(TABLE_NAME, new String[] { "ROWID", "*" }, where, null, null, null, null);

затем

long rowId = cursor.getLong(0);

Ответ 6

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

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

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

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

введите описание изображения здесь

Внимание! ROWID в SELECT SQL не зависит от случая (например, работает RoWiD).

Используя

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

НЕ ДОЛЖЕН возвращать ROWID (аналогично для null для столбцов при использовании метода 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, т.е. , является строчным.