Как получить идентификатор строки из курсора
Как получить идентификатор строки из курсора?
Ответы
Ответ 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, т.е. , является строчным.