Подтвердить что ты не робот

Как получить значение столбца из курсора sqlite?

Я пытаюсь получить значение столбца из курсора, этот столбец генерируется во время выполнения вычислениями внутри запроса, я получаю нулевое значение этого столбца, я могу получить значение всех других столбцов, которые существуют в таблице SQLite.

Я выполняю тот же запрос в редакторе SQLite, он также показывает значение сгенерированного столбца в наборе результатов.

Почему это дает нулевое значение, когда я извлекаю его из курсора?

4b9b3361

Ответ 1

Очень просто вы можете получить его одним из следующих способов:

String id = cursor.getString( cursor.getColumnIndex("id") ); // id is column name in db

или

String id = cursor.getString( cursor.getColumnIndex(0)); // id is first column in db

Ответ 2

Имена столбцов курсора чувствительны к регистру, убедитесь, что вы соответствовали случаю, указанному в имени псевдонима db или столбца

Ответ 3

  • Если вы не знаете индекс столбца в выбранном запросе, выполните следующие действия:

    Определите константу для всех полей таблицы, так что легко получить поле имя вам не нужно проверять его заклинание

    создать класс Database Costant с именем "DBConstant.java" и определить табличные поля

    public static final String ID = "id";

    Затем получите значение из курсора,

    cursor.getString(cursor.getColumnIndex(DBConstant.ID));

    cursor.getColumnIndex(имя поля); он возвращает индекс столбца поля в выписке select cursor.getString(индекс столбца). он возвращает значение, которое находится в этом столбце

  • Если вы знаете индекс столбца в выбранном запросе,

    cursor.getString(0);

Ответ 4

Если вы хотите получить строковое значение

String id = cursor.getString( cursor.getColumnIndex("name") ); // id is column name in db
or

String id = cursor.getString( cursor.getColumnIndex(0)); 

Если вы хотите получить целочисленное значение

String id = cursor.getInt( cursor.getColumnIndex("id") ); // id is column name in db
or

String id = cursor.getInt( cursor.getColumnIndex(0)); 

Ответ 5

В Android Studio 3.4.1 (я использую Kotlin, но здесь это не имеет никакого значения) я обнаружил очень странное поведение.

Например:

Cursor c = db.rawQuery("Select IDH, ID, NOME, CONTEUDO from CalcHome 
           Inner Join Calcs using(id)", null)

Имена столбцов регистрировались жестко, независимо от регистра имен полей в Select. Компонент массива c.columnNames[0] является Idh не IDH

Так

int a = c.getInt(c.getColumnIndex("IDH")) // gives a runtime error.

Но

int a = c.getInt(c.getColumnIndex("Idh")) // works!