Intereting Posts
Как удалить записи из firebase Как открыть стандартное приложение Google Map из моего приложения? Процессор голодный Android-эмулятор: андроид ARM EABI изображение vs x86 image Android – количество просмотров списка просмотров Почему ContentResolver.requestSync не вызывает синхронизацию? Ошибка компиляции исходного кода Android: «Попробуйте увеличить размер кучи с помощью опции java» -Xmx <size> » Drawable getResources (). Проблема getIdentifier Ресурс ссылочной строки из кода Как выровнять радиокнопку в центре экрана Почему атрибут LinearLayout «layout_weight» кажется противоположным тому, что я думаю, что он должен делать? Консоль разработчика Google Play: приложение застряло в «Обновление обработки» Создание каталога для кэша OkHttp на Android? Android View vs SurfaceView vs GLSurfaceView для 2D-чертежного приложения с масштабируемым пользовательским интерфейсом ButterKnife 8.0.1 не работает Очистить историю (недавняя папка) в Android-селекторе Android 5+ (ACTION_OPEN_DOCUMENT_TREE)

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

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

Solutions Collecting From Web of "Как получить идентификатор строки из курсора"

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

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

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

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

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

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

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

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

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

тогда

 long rowId = cursor.getLong(0); 

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

Например, для таблицы с тремя определенными столбцами (имена, цвет и возраст) без обычного столбца _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, т.е. оно строчное .